iOS单例场景初见

327 阅读1分钟

今天在了解iOS的copy的时候,无意间发现了单例模式相关的知识:

Apple官方建议: 由于自己设计单态模式存在一定风险,主要是考虑到可能在多线程情况下会出现的问题,因此苹果官方建议使用以下方式来实现单态模式:

此模式用于解决在整个app进程中,无论怎样去处理当前的类,永远会拿到当前单例的情况,可以用于当前app的全局上下文等场景

static MyClass *_sharedManager = nil;
+ (MyClass*)sharedInstance {
    @synchronized(self) {
        if (_sharedManager == nil) {
            [[self alloc] init]; // assignment not done here
        }
    }
    return _sharedManager;
}

+ (id)allocWithZone:(NSZone *)zone {
    @synchronized(self) {
        if (_sharedManager == nil) {
            _sharedManager = [super allocWithZone:zone];
            return _sharedManager; // assignment and return on first allocation
        }
    }
    return _sharedManager; //on subsequent allocation attempts return _sharedManager
}

- (id)copyWithZone:(NSZone *)zone {
    return self;
}