gpt4 book ai didi

ios - dispatch_once 与静态

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:30 27 4
gpt4 key购买 nike

我目前正在为我的应用程序编写一个帮助程序类。助手类将返回全局可访问的变量。我创建了一个简单的助手,如下所示:

@interface MyHelper : NSObject
{

}

+(id) sharedHelper;

+(NSMutableArray *) employers;


+(id) sharedHelper
{
static MyHelper *sharedHelper = nil;
static dispatch_once_t onceToken;

dispatch_once(&onceToken,^{

sharedHelper = [[self alloc] init];
});

return sharedHelper;
}

+(NSMutableArray *) employers
{
return _employers;
}

现在我可以像这样访问雇主:

[MyHelper employers] 我也可以这样访问它 [[MyHelper sharedHelper] employers] 每种方法的好处是什么,或者它们都相同。

最佳答案

我想 employers 数组是您的 MyHelper 类的一个属性。

如果你调用 [MyHelper employers] 而没有调用 [MyHelper sharedHelper] 你会得到不正确的结果(employers 数组的值是垃圾)。

也许这里的最佳实践是在 +(NSMutableArray *) employers 中使用延迟加载并从 +(id) sharedHelper 中获取静态变量:

static MyHelper *sharedHelper = nil;
static dispatch_once_t onceToken;

+(id) sharedHelper
{
dispatch_once(&onceToken,^{

sharedHelper = [[self alloc] init];
});

return sharedHelper;
}

+(NSMutableArray *) employers
{
if(!sharedHelper)
[MyHelper sharedHelper];

return _employers;
}

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

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