我一直在阅读,如果我在这里编写了线程安全的实现,那么很难获得清晰的感觉。
我的吸气剂看起来像
+ (MySingleton *)getSingleton
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
singleton = [[MySingleton alloc] init];
});
return singleton;
}
我的接班人是:
+ (void)updateSingleton:(MySingleton *)newSingleton
{
@syncronized(self) {
singleton = newSingleton;
}
}
答案 0 :(得分:2)
不,这不是线程安全的。两种修改方法之间的排除机制不同。 dispatch_once
与@synchronized
毫无关系。
除定义外,单子绝不能替换。单身人士可以随时存在,一旦完成,就永远不会消失。
此外,getSingleton
应该是sharedInstance
或一些类似的Objective-C标准绰号。除非方法通过引用返回东西,否则它们决不能以get
开头。