Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么对类方法中的局部静态变量初始赋值为nil只发生一次?_Objective C_Cocoa - Fatal编程技术网

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;
}