单例模式

来源:互联网 发布:北津学院教务网络系统 编辑:程序博客网 时间:2024/05/21 11:22

今天和大家分享一下ios中常用的单例模式。

首先解释一下什么叫做单例,顾名思义,单例就是在程序中只有这么一个实例对象,专业点就是说对象只初始化一次。

单例模式主要有两种:

第一种,

+ (id)sharedInstance{    static ViewController *instance = nil;    @synchronized(self)    {        if (!instance) {            instance = [[ViewController alloc] init];        }    }    return instance;} 
使用这个方法创建单例主要注意一下,@synchronized()关键字,其作用是多线程保护。也就是说在多线程的情况下,如果同时调用这个单例方法并且这个实例是第一次初始化,那么就会导致创建出两个实例,而加上@synchronized()关键字恰好可以避免这种情况。


第二种,

+ (id)sharedInstance{    static ViewController *instance = nil;    static dispatch_once_t once;    dispatch_once(&once,^{        instance = [[ViewController alloc]init];    });    return instance;}

使用这种方式创建单例,是在GCD机制出现之后。void dispatch_once(dispatch_once_t*predicate,dispatch_block_tblock);

解释:Executes a block object once and only once for the lifetime of an application.意思是说在应用程序的整个生命周期期间,代码块里面的代码只执行一次。



0 0