我见过很多人建议使用dispatch_once来做单身人士:
+(MyClass *)singleton {
static dispatch_once_t pred;
static MyClass *shared = nil;
dispatch_once(&pred, ^{
shared = [[MyClass alloc] init];
});
return shared;
}
为什么当它真的不支持真正的单例时会更好,人们仍然可以使用init创建实例甚至在sharedInstance上发布一个版本?
Apple正在阻止所有这些案件 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html 我知道它不是线程安全的,但我认为很容易在其中放置一个同步块以使其具有线程安全性。答案 0 :(得分:2)
为什么不把两者结合起来呢?
使用您列出的功能代替Apple的+ (MyGizmoClass*)sharedManager
功能,但实现所有allocWithZone
,copyWithZone
,retain
,retainCount
,{{1 }}和release
覆盖。
答案 1 :(得分:-1)
如果你想让它成为一个单身人士,你担心如果你调用alloc / init会发生什么:不要这样做!就那么简单。
有 个案例,如NSFileManager,你有两个单独的[NSFileManager defaultManager],但你也可以拥有单独的NSFileManager *对象。所以这很容易实现。