OC:单例销毁与重建
2018-10-08 本文已影响26人
春暖花已开
dispatch_once在判断是否需要执行的关键语句:
if (DISPATCH_EXPECT(*predicate, ~0l) != ~0l) {
dispatch_once_f(predicate, context, function);
}
可以了解到 dispatch_once_t参数的初始值就是0l,只需要重置dispatch_once_t参数及实例参数,具体代码如下:
static CSAccountManager *singleton = nil;
static dispatch_once_t onceToken;
+ (instancetype)sharedInstance{
dispatch_once(&onceToken, ^{
singleton = [[CSAccountManager alloc] init];
});
return singleton;
}
- (void)resetAccount {
singleton = nil;
onceToken = 0l;
[[CSAccountManager sharedInstance] updateUserData];
}