iOS开发之单例模式

来源:互联网 发布:linux 文件夹权限 编辑:程序博客网 时间:2024/05/21 11:32
     

       在开发中时常会用到单例设计模式,目的就是为了在程序的整个生命周期内,只会创建一个类的实例对象,而且只要程序不被杀死,该实例对象就不会被释放。

       创建单例的方法有两种分别是;

       1,互斥锁方式创建

static id _instance;+ (instancetype)allocWithZone:(struct _NSZone *)zone{@synchronized(self) {if (_instance == nil) {_instance = [super allocWithZone:zone];}}return _instance;}+ (instancetype)sharedInstance{@synchronized(self) {if (_instance == nil) {_instance = [[self alloc] init];}}return _instance;}- (id)copyWithZone:(NSZone *)zone{return _instance;}

     2.GCD方式创建单例

static id _instance;+ (instancetype)allocWithZone:(struct _NSZone *)zone{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instance = [super allocWithZone:zone];});return _instance;}+ (instancetype)sharedInstance{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instance = [[self alloc] init];});return _instance;}- (id)copyWithZone:(NSZone *)zone{return _instance;}- (id)mutableCopyWithZone:(NSZone *)zone {return _instance;}
     这里值得注意的是我们要重写allocWithZone方法来确保其他开发人员调用alloc:init方法是时候生成实例的唯一性,同样重写copyWithZone:和mutableCopyWithZone也是保证实例的唯一性!

0 0
原创粉丝点击