iOS 单例

  1. 单例的理解

            单例模式在他的核心结构中只包含一个叫单例的特殊类,他只有一个实例对象并且易于外部访问,

       从而实现对实例个数的控制,并且减少系统资源,如果想要实现实例对象只有一个,那么单例模式是你最好的选择。  

      2.单例创建步骤

 

  •  创建一个类方法,名字以shared,default current开头。  
  •  创建一个全局变量来保存对象的引用。  
  •  判断该对象是否存在,如果没有则创建。

       3.单例写法。  

    • 非线程安全的单例        

                   /**  *  非线程安全的单例  *  *  @return  */

                 + (instancetype)defaultPerson {    

                  //创建一个全局变量,以保存对象的引用    

                     static Person *person = nil;    

                            if (person == nil) {        

                                   person = [[self alloc]init];  

                               }    

                      return person;

                     }

    •  线程安全单例写法1 - 加了一个互斥锁        

                  + (instancetype)defaultPerson {  

              static Person *person = nil;      

          @synchronized(self) {        

             if (person == nil) {          

                  person = [[self alloc]init];      

              }    

          }    

          return person;

       }

    • 线程安全单例写法2        

       + (void)initialize {  

            static Person *person = nil;      

            if([self class] == [Person class])     {      

                  person = [[Person alloc]init];  

                }

       }

    • 线程安全单例写法3 -- GCD,苹果推荐的          

      + (instancetype)defaultPerson {  

          static Person *person = nil;    

         static dispatch_once_t onceToken;  

          dispatch_once(&onceToken, ^{      

             person = [[self alloc]init];  

          });  

        return person;

      }

posted @ 2016-05-24 10:32  寂寞的倔强  Views(115)  Comments(0Edit  收藏  举报