gpt4 book ai didi

objective-c - 使用 dispatch_once

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:59 26 4
gpt4 key购买 nike

我有以下代码:

  static NSDictionary * errorDescriptions = nil;

+ (NSString *) errorsFromCode: (WPErrorCode) code {

if(errorDescriptions == nil) {
errorDescriptions = @{[NSNumber numberWithInt: InvalidCar]: NSLocalizedStringFromTable(@"Car is invalid.", @"WePay", @"validation: invalid car"), ...
}

return [errorDescriptions objectForKey: [NSNumber numberWithInt: code]];
}

我得到建议将上面的代码更改为:

+ (NSString *) errorsFromCode: (WPErrorCode) code {
static NSDictionary * errorDescriptions = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
errorDescriptions = @{[NSNumber numberWithInt: InvalidCar]: NSLocalizedStringFromTable(@"Car is invalid.", @"WePay", @"validation: invalid car"), ...
}
return [errorDescriptions objectForKey: [NSNumber numberWithInt: code]];
}

为什么会这样?为什么我必须使用 dispatch_once?

最佳答案

您不必使用它,但您放入 block 中的内容只会以线程安全的方式执行一次。

您不需要也不应该使用 if errorDescriptions == nil 检查您是否将使用 dispatch_once

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

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