OC

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];
}

参考自:HappyCoco

上一篇 下一篇

猜你喜欢

热点阅读