单例是一种模式,更像是数学中的单集合,里面有且仅有一个元素.单例的运用场景有很多,尤其是需要全局变量存在的项目.下面分享几个单例的实现.
1.线程锁
+ (instancetype)sharePerson{
static Person *_person = nil;
@synchronized (self) {
if (!_person) {
_person = [[Person alloc] init];
}
return _person;
}
}
2.重写 alloc
+ (instancetype)alloc{
static Person *_person = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//里面的代码只执行一遍
_person = [super alloc];
});
return _person;
}
3.线程安全,GCD 神器.最常用!
+ (instancetype )sharePerson{
static Person *_person = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_person = [[Person alloc] init];
});
return _person;
}
4.NSZone的一个理解,不深究
+ (instancetype)sharePerson{
static Person *_person = nil;
if (!_person) {
_person = [[super allocWithZone:NULL] init];
}
return _person;
}
网友评论