今天在了解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;
}