iOS开发 伪单例

伪单例顾名思义就是创建单例的时候有可能不能保障唯一的实例,原因是别人可能并不知道你是单例,在生成的时候用[[class alloc] init]的形式,allocWithZone能保证不管哪种形式都能确保是单例。

一般我们习惯在定义方法share中使用dispatch_once函数(这个函数的作用就是保证block)来保证单例模式在整个程序中只被创建一次。但是之前看到有个同学是覆写+(instancetype)allocWithZone:(struct _NSZone *)zone方法中添加代码,保证只被创建一次。

单例的使用场景概括如下:

控制资源的使用,通过线程同步来控制资源的并发访问。

控制实例的产生,以达到节约资源的目的。

控制数据的共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。

+(instancetype)sharedInstance

{

    staticdispatch_once_tonceToken;

    dispatch_once(&onceToken,^{

        _sharedInstance =[[super allocWithZone:NULL]init];

    });

    return_sharedInstance;

}

+(id)allocWithZone:(struct_NSZone *)zone

{

    return[TestOyqNSObject sharedInstance];

}

+(instancetype)alloc

{

    return[TestOyqNSObject sharedInstance];

}

-(id)copy

{

    returnself;

}

-(id)mutableCopy

{

    returnself;

}

-(id)copyWithZone:(struct_NSZone *)zone

{

    returnself;

}

你可能感兴趣的:(iOS开发 伪单例)