Jam*_*sev 2 singleton objective-c
在我的班级甲板我有
static Deck *gInstance = NULL;
+(Deck *) instance {
@synchronized(self) {
if (gInstance == NULL)
gInstance = [[self alloc] init];
}
return (gInstance);
}
Run Code Online (Sandbox Code Playgroud)
和一个看起来像的init方法
-(id) init {
if (gInstance != NULL) {
return self;
}
self = [super init];
if (self) {
// Lots of clever things
}
gInstance = self;
return self;
}
Run Code Online (Sandbox Code Playgroud)
我在这里关心的主要是是否init正确实施.如果我写的内容适合你,请告诉我.
或者...有没有办法让我init私密并阻止人们(包括我自己)完全看到它?
这是一种奇怪的单例实现.我最喜欢的实现是使用GCD中的一些新功能.
+ (MyObj*)sharedObject;
{
static dispatch_once_t once;
static MyObj *sharedObj;
dispatch_once(&once, ^ { shared = [[MyObj alloc] init]; });
return shared;
}
Run Code Online (Sandbox Code Playgroud)
我建议只做这件事,仅此而已.强制执行一个严格的单身人士只会痛苦地结束,而且通常是毫无意义的反模式.
至于你的实现有什么严格"错误",我相信你想gInstance在初始化器中返回它不是NULL,而不是self.