gpt4 book ai didi

Objective-C Singleton 实现,我做对了吗?

转载 作者:行者123 更新时间:2023-12-04 03:14:35 27 4
gpt4 key购买 nike

在我的类里面,我有

static Deck *gInstance = NULL;


+(Deck *) instance {
@synchronized(self) {
if (gInstance == NULL)
gInstance = [[self alloc] init];
}

return (gInstance);
}

和一个看起来像的初始化方法

-(id) init {

if (gInstance != NULL) {
return self;
}

self = [super init];

if (self) {
// Lots of clever things
}
gInstance = self;
return self;

}

我这里主要关心的是init是否实现正确。如果我写的内容适合您,请告诉我。

或者...有没有办法让 init 私有(private)化并防止其他人(包括我自己)完全看到它?

最佳答案

这是一种奇怪的单例实现。我最喜欢的实现是使用 GCD 中的一些较新的功能。

+ (MyObj*)sharedObject;
{
static dispatch_once_t once;
static MyObj *sharedObj;
dispatch_once(&once, ^ { shared = [[MyObj alloc] init]; });
return shared;
}

我建议只这样做,不多也不少。强制执行严格的单例只会以痛苦告终,而且通常毫无意义,而且是一种反模式。

至于你的实现是否有任何严格的“错误”,我相信你会希望在初始化程序中返回 gInstance 当它不是 NULL,而不是 self 时。

关于Objective-C Singleton 实现,我做对了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8177406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com