【发布时间】:2011-08-08 20:49:16
【问题描述】:
如果你可以针对 iOS 4.0 或更高版本
使用 GCD,在 Objective-C(线程安全)中创建单例是最好的方法吗?
+ (instancetype)sharedInstance
{
static dispatch_once_t once;
static id sharedInstance;
dispatch_once(&once, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
【问题讨论】:
-
有没有办法阻止类的用户调用alloc/copy?
-
dispatch_once_t 和 dispatch_once 似乎是在 4.0 而不是 4.1 中引入的(参见:developer.apple.com/library/ios/#documentation/Performance/…)
-
如果 init 需要使用单例对象,则此方法会出现问题。 Matt Gallagher 的代码曾多次为我工作。 cocoawithlove.com/2008/11/…
-
我知道在这个例子中它无关紧要;但是为什么人们不更多地使用“新”。 dispatch_once(&once, ^{sharedInstance=[self new];} 只是看起来更整洁一些。相当于alloc+init。
-
一定要开始使用返回类型
instancetype。使用它而不是id时,代码完成要好得多。
标签: ios objective-c singleton grand-central-dispatch