A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 枫煠 中级黑马   /  2014-12-28 19:23  /  927 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 枫煠 于 2014-12-28 19:28 编辑

什么是单例设计呢?在我的理解就是系统永远只会留一块记忆体空间给它,永远不会消失,除非你主动摧毁,无论你呼叫它几次,永远只有一份存在
其实Foundation这个Framework里面也有一些类别也有用到单例模式,
像是[NSNotificationCenter defaultCenter][NSUserDefaults standardUserDefaults]之类的,只要有在.h里面看到+(classname*) standardClassName或是+(classname*) defaultClassName之类的都是用到单例模式

什么时候会用到呢?
比如有个数据资料需要在整个APP里面共用不能消失,这时候就派上用场了(需要共用的时候)

那要怎么样自己建立一个单例类别呢?
  1. + (SAlertView*)sharedView {
  2.     static SAlertView *sharedInstance = nil;
  3.     static dispatch_once_t oncePredicate;
  4.     dispatch_once(&oncePredicate, ^{
  5.         sharedInstance = [[self alloc] init];
  6.     });
  7.     return sharedInstance;
  8. }
复制代码
只需用dispatch_once就能轻轻松松的创建一个单例

我做了一个Demo来比较有用单例跟没用单例的差别
SAlertView是我创的单例类别,UIAlertView是一般提示UI类别,
我建立了两个Button来呼叫这两个类别,观察这两类别在App里面生存的数量(图片上面可以很清楚的了解)
最后附上Demo,有兴趣的可以自己去下载来看看^^谢谢观赏




螢幕快照 2014-12-28 19.14.55.png (65.17 KB, 下载次数: 4)

在这里可以很清楚的看见,不论我按几次产生单例,它的总数量永远是1,但是非单例却会一直增加 ... ... ...

在这里可以很清楚的看见,不论我按几次产生单例,它的总数量永远是1,但是非单例却会一直增加 ... ... ...

SingletonPattern.zip

33.95 KB, 下载次数: 22

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马