iOS开发笔记2:单例模式(singleton)

    每个app有且仅有一个UIApplication,相似UIApplication“ [UIApplication sharedApplication]”这种一个类有且仅有惟一实例的设计即单例模式。
安全

单例设计及要点

    一个单例类设计以下图所示app

    其中有几点要注意:spa

     (1)实例须要用static,防止在其余文件中被修改;线程

     (2)鉴于开发习惯,因此类方法都是以“sharedXXX"命名,并在其中进行惟一一次实例化;设计

     (3)alloc时会调用allocWithZone方法,为了保持单例,须要重写该方法;3d

     (4)检查两次实例是否为nil是有不一样含义的,第一次检查实例是否为nil也就是常说的双重检查锁,避免重复加锁。由于当第一次实例化后,后续每次获取实例时没有必要进行加锁等操做,直接返回实例便可,第二次检查实例是否为nil很明显就是为了保证明例惟一了。对象

     (5)加锁@synchronized的意义在于保证线程安全,避免_instance为nil时恰好多个线程同时获取实例,因而同时产生了多个实例。经过加锁来保证同一时刻只能有一个线程进行调用,确保单例;blog

     (6)为了防止copy时产生新的实例,一样对copyWithZone进行了从新,保证单例作用域

GCD方式实现单例

 GCD方式单例设计以下图所示开发

    

static的做用

    static修饰全局变量的做用在于限制其做用域,使变量只在定义的源文件内有效。

    反之,若是咱们去掉static的修饰,就能够在外部其余文件进行引用并修改变量,也就破坏单例了。

    

 

MRC环境下使用单例

     若是是在MRC环境下使用单例,除了上述设计外还要进行一些重写,使对象引用计数永远为1

     

相关文章
相关标签/搜索