【发布时间】:2014-08-27 09:43:52
【问题描述】:
我使用以下代码创建了一个单例类:
static MyClass *sharedMyClass = nil;
+ (id)getInstance {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMyClass = [[self alloc] init];
});
return sharedMyClass;
}
我担心我的类的用户可以调用 alloc 方法来创建该类的其他实例。因此,这将不再是单例我需要重写 alloc 方法吗?如果是这样,我建议以这种方式覆盖它:
+ (id)alloc
{
id instance = sharedMyClass;
if (instance == nil) {
instance = [super alloc];
}
return instance;
}
【问题讨论】:
-
+(id)alloc { @synchronized([MyClass class]) { NSAssert(_sharedNavTheme == nil, @"试图分配第二个单例实例。"); _sharedMyClass = [超级分配];返回_sharedMyClass; } 返回零; }
标签: ios objective-c singleton instantiation alloc