天天看点

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

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

方式一: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之类的来防止使用多个线程或者队列时不同步的问题。

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!

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

继续阅读