ios中单例的写法和目的

来源:互联网 发布:a5源码网 编辑:程序博客网 时间:2024/05/16 07:30

单例目前一般有两种写法,我早期在ios4,5的时候,一般采用如下写法

方法一:

static XxxManager *shared = nil;     + (XxxManager *)sharedManager {      if (!shared)  {        shared = [[self allocWithZone:NULL] init];      }    return shared;  }


随着ARC和GCD的广泛使用,现在单例的写法大都如此:

方法二:

+ (XxxManager *)sharedManager{      static XxxManager *sharedInstance = nil;      static dispatch_once_t predicate;      dispatch_once(&predicate, ^{           sharedInstance = [[self alloc] init];       });      return sharedInstance;}  

对比这两种写法,

第一种比较常规,符合C的习惯,也是曾经苹果的推荐写法。

第二种写法好处是用到了GCD的dispatch_once_t,这东西就是在多线程中用的,所以可以保证线程安全,同时这种方式也能很好的支持了ARC。


不过使用单例的时候需要注意:在单例初始化时,一定不能出现对单例的引用!否者会引起循环调用。

简单说就是不能在单例类的初始化的方法中,自身或者成员变量又对单例的变量或方法进行调用。

具体参考:http://www.cnblogs.com/sunnyxx/archive/2012/11/09/2762861.html

0 0
原创粉丝点击