gpt4 book ai didi

objective-c - 在 Objective-C 中初始化静态变量

转载 作者:太空狗 更新时间:2023-10-30 04:00:21 26 4
gpt4 key购买 nike

在 Objective-C 类中,我只想将文本文件的内容加载到 NSString 中,以便该类的所有实例都可以使用它。

在 Java 世界中,多年来我了解到,如果您不使用经过验证的习惯用法,就线程安全而言很容易犯这种微妙的错误。所以我想确保我使用了正确的习语。

你能给我看一个执行此操作的 Objective-C 类的示例吗?

这是我开始的空类...

@interface TestClass : NSObject
- (NSString *)doSomething:(NSUInteger)aParam;
@end

@implementation TestClass {
}

- (id)init {
self = [super init];
if (self) {

}
return self;
}

- (NSString *)doSomething:(NSUInteger)aParam {
// something with shared NSString loaded from text file,
// depending on the value of aParam
return @"";
}
@end

最佳答案

在 Objective C 中处理静态属性的惯用方法是将它们隐藏在类方法(带有 + 的方法)后面。在类方法的实现中将字符串声明为 static,并使用 dispatch_once 进行初始化:

+ (id)stringFromFile {
static dispatch_once_t once;
static NSString *sharedString;
dispatch_once(&once, ^{
sharedString = [NSString
stringWithContentsOfFile:@"MyFile"
encoding:... // ...supply proper parameters here...
error:...];
});
return sharedString;
}

这种设置静态对象的方式是线程安全的。 sharedString 将被初始化一次,即使该方法被多个线程并发调用也是如此。

现在您可以通过调用 [MyClass stringFromFile] 从任何地方访问您的字符串。

关于objective-c - 在 Objective-C 中初始化静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12160279/

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