Objective c 为什么对类方法中的局部静态变量初始赋值为nil只发生一次?
}Objective c 为什么对类方法中的局部静态变量初始赋值为nil只发生一次?,objective-c,cocoa,Objective C,Cocoa,} 以上代码来自“在mac上学习可可”。这本书指出,对nil的初始赋值仅在第一次调用该方法时发生?我的问题是为什么会这样?因为静态数据只初始化一次。尽管变量位于函数内部,但它的存储持续时间是整个程序的存储持续时间。它初始化一次,并在函数调用之间保持其值 您发布的代码在概念上与以下代码完全相同: + (NSArray *)motivations { static NSArray *motivations = nil; if (!motivations) { motivations = [[
以上代码来自“在mac上学习可可”。这本书指出,对nil的初始赋值仅在第一次调用该方法时发生?我的问题是为什么会这样?因为静态数据只初始化一次。尽管变量位于函数内部,但它的存储持续时间是整个程序的存储持续时间。它初始化一次,并在函数调用之间保持其值 您发布的代码在概念上与以下代码完全相同:
+ (NSArray *)motivations {
static NSArray *motivations = nil;
if (!motivations) {
motivations = [[NSArray alloc] initWithObjects:@"Greed", @"Revenge", @"Bloodlust", @"Nihilism", @"Insanity", nil];
}
return motivations;
就存储持续时间而言(虽然不是范围,因为现在从外部可以看到动机
)。这里有一种单例模式,它将数组初始化为nothing,然后在第一次使用此代码时填充它一次
ISO C99标准(是的,我知道这不是C,但概念是一样的)规定:
所有具有静态存储持续时间的对象应在程序启动前初始化(设置为其初始值)
实际上,在第一次调用该方法之前,在
main()
偶数之前,它被初始化为nil。
NSArray *motivations = nil;
+ (NSArray *)motivations {
if (!motivations) {
motivations = [[NSArray alloc] initWithObjects:@"Greed", @"Revenge",
@"Bloodlust", @"Nihilism", @"Insanity", nil];
}
return motivations;
}