zoukankan      html  css  js  c++  java
  • 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;

          }

  • 相关阅读:
    学习MSMQ笔记
    swfobject 2.0 使用(转)
    发现博客园的一个小问题
    4月10日
    NHibernate的一点思考
    最新手机号码正则表达式
    如何在页面完美显示版权符号(转)
    OpenGL由已知控制点绘制模拟曲面地形
    android自定义view[控件重用]时出现“No resource identifier found for attribute *** in package *** ”
    基于ARM的模拟器
  • 原文地址:https://www.cnblogs.com/liu-lang/p/5522557.html
Copyright © 2011-2022 走看看