您现在的位置是:首页 > 文章详情

iOS:创建单例对象的两种方式

日期:2017-05-27点击:437

单例模式:创建单例对象的两种方式


方式一:iOS4版本之前
     static SingleClassManager *singleManager = nil;
     +(SingleClassManager*)sharedManager
     {
             @synchronized(self)  //同步加锁,在多线程中使用,可以使线程安全
             {             
                   if(singleManager == nil)
                    {
                              singleManager = [[SingleClassManager alloc]init];
                    } 
              }
           return singleManager;
      }
 
 
方式二:iOS5版本开始(block函数)
    +(SingleClassManager *)sharedManager
    {
          static SingleClassManager *singleManager = nil;
          static dispatch_once_t  predicate;
          dispatch_once(&predicate,^{
              singleManager = [[SingleClassManager alloc]init];
          });
          return singleManager;
    }
    该方法有很多优势: 
            1 线程安全
           2 很好满足静态分析器要求
           3 和自动引用计数(ARC)兼容 
           4 仅需要少量代码
      说明:
             该函数接收一个dispatch_once用于检查该代码块是否已经被调度的谓词(是一个长整型,实际上作为BOOL使用)。它还接收一个希望在应用的生命周期内仅被调度一次的代码块,对于本例就用于shared实例的实例化。
dispatch_once不仅意味着代码仅会被运行一次,而且还是线程安全的,这就意味着你不需要使用诸如@synchronized之类的来防止使用多个线程或者队列时不同步的问题。
程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
分类:  iOS初级

本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4856387.html,如需转载请自行联系原作者
原文链接:https://yq.aliyun.com/articles/366534
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章