gpt4 book ai didi

objective-c - 为什么对于类方法中的局部静态变量,对 nil 的初始赋值只发生一次?

转载 作者:搜寻专家 更新时间:2023-10-30 20:01:37 24 4
gpt4 key购买 nike

+ (NSArray *)motivations {
static NSArray *motivations = nil;
if (!motivations) {
motivations = [[NSArray alloc] initWithObjects:@"Greed", @"Revenge", @"Bloodlust", @"Nihilism", @"Insanity", nil];
}
return motivations;

以上代码来自“在 Mac 上学习 Cocoa”。书上说对 nil 的初始赋值只发生在第一次调用方法时?我的问题是如何/为什么会这样?

最佳答案

因为静态只初始化一次。尽管变量在函数内部,但它的存储持续时间是整个程序的持续时间。它被初始化一次并在函数调用之间保持其值。

您发布的代码在概念上与:

NSArray *motivations = nil;
+ (NSArray *)motivations {
if (!motivations) {
motivations = [[NSArray alloc] initWithObjects:@"Greed", @"Revenge",
@"Bloodlust", @"Nihilism", @"Insanity", nil];
}
return motivations;
}

就存储持续时间而言(虽然不是范围,因为 motivations 现在从外部可见)。您在这里拥有的是一种单例模式,它将数组初始化为空,然后在您第一次使用此代码时一次填充它。

ISO C99 标准(是的,我确实意识到这不是 C,但概念是相同的)指出:

All objects with static storage duration shall be initialized (set to their initial values) before program startup.

关于objective-c - 为什么对于类方法中的局部静态变量,对 nil 的初始赋值只发生一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4131465/

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