gpt4 book ai didi

ios - dispatch_once 的使用

转载 作者:行者123 更新时间:2023-11-29 00:17:50 28 4
gpt4 key购买 nike

我理解 dispatch_once 是一个等同于 static 变量的东西,并且 dispatch_once 中的代码片段在整个过程中只执行一次应用程序。

我正在浏览一个庞大的代码库并遇到了这样的事情

+ (DBHelper *)sharedInstance {

static DBHelper *sharedDBHelper = nil;
static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{
sharedDBHelper = [[super alloc] initUniqueInstance];
});

return sharedDBHelper;
}

DBHelper.sharedInstance 用于获取一个对象,在很多地方都会用到生成对象。

我对为什么在这里使用 dispatch_once 感到困惑,因为那意味着您只能拥有该类的一个对象?

最佳答案

这是共享实例的标准模式,也称为假单例

在许多情况下,程序员选择使用可以从应用程序的任何部分轻松访问的单个对象 - 通过调用返回对共享对象的引用的静态方法,即 sharedInstance您的示例 - 作为在应用程序的其他独立部分之间提供通信/共享数据的手段。

这是一个faux 单例模式,因为它不会阻止创建相同类型的其他实例(在您的示例中为 DBHelper)。 真正的单例模型是一种只能创建该类型的单个实例的模型。 (Apple 曾经有示例代码展示如何创建真正的单例,但它从未针对后 ARC 世界进行更新,有关包括 ARC 版本在内的更多详细信息,请参阅 this answer。)

HTH

关于ios - dispatch_once 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44828652/

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