+ (NSArray *)motivations {
static NSArray *motivations = nil;
if (!motivations) {
motivations = [[NSArray alloc] initWithObjects:@"Greed", @"Revenge", @"Bloodlust", @"Nihilism", @"Insanity", nil];
}
return motivations;
Run Code Online (Sandbox Code Playgroud)
}
上面的代码来自'在Mac上学习Cocoa'.该书指出,对nil的初始赋值仅在第一次调用该方法时发生?我的问题是如何/为什么是这样的?
因为静态只初始化一次.尽管变量在函数内部,但它的存储持续时间是整个程序的存储持续时间.它初始化一次,并在函数的调用之间保持其值.
您发布的代码在概念上完全相同:
NSArray *motivations = nil;
+ (NSArray *)motivations {
if (!motivations) {
motivations = [[NSArray alloc] initWithObjects:@"Greed", @"Revenge",
@"Bloodlust", @"Nihilism", @"Insanity", nil];
}
return motivations;
}
Run Code Online (Sandbox Code Playgroud)
在存储持续时间方面(虽然不是范围,因为motivations现在可以从外部看到).你在这里什么是一种其初始化数组没有Singleton模式,然后填充它,一旦您使用此代码的第一次.
ISO C99标准(是的,我确实意识到这不是C,但概念是相同的)状态:
具有静态存储持续时间的所有对象应在程序启动之前初始化(设置为其初始值).
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |