gpt4 book ai didi

objective-c - 当我使用 static 实现单例时,有什么可能出错的地方吗?

转载 作者:行者123 更新时间:2023-12-04 02:44:15 25 4
gpt4 key购买 nike

我正在实现一个单例类(无论是否错误,请不要参与讨论)。我有一个方法来获取这个类的实例,它是延迟初始化的:

+ (FFDataManager *)sharedDataManager {
static FFDataManager *dm = nil;
if (!dm) {
dm = [[FFDataManager alloc] init];
}

return dm;
}

在使用 static(方法内部)而不是创建全局变量时,有什么我应该注意的吗?有什么地方会出错吗,网上的教程都是用全局变量。

最佳答案

我首选的单例实现如下所示:

+ (MyClass *) sharedInstance {
static dispatch_once_t predicate = 0;
__strong static MyClass *shared = nil;

dispatch_once(&predicate, ^{
shared = [[self alloc] init];
});

return shared;
}

使用 dispatch_once 确保这也是线程安全的。当多个线程同时访问时,您的代码将分配两次。

关于objective-c - 当我使用 static 实现单例时,有什么可能出错的地方吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9116745/

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