gpt4 book ai didi

objective-c - 如果静态变量在上一行被初始化为 nil,为什么还要检查它是否为 nil?

转载 作者:可可西里 更新时间:2023-11-01 03:04:16 24 4
gpt4 key购买 nike

下面是来自 Apple's iOS Core Data tutorial 的代码示例我认为条件语句检查对象是否为 nil 很奇怪。如果条件语句之前的行将对象设置为 nil,对象是否总是计算为 nil?

// A date formatter for the time stamp
static NSDateFormatter *dateFormatter = nil;
if (dateFormatter == nil) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
}

最佳答案

因为 static。每当执行通过该语句时,此变量不会设置为 nil,它仅在程序启动时设置。

这是静态存储持续时间变量的一个特性。它们在启动时被设置为初始值,并在之后保留您设置的任何值。例如下面的代码:

void plugh(void) {
static int xyzzy = 0;
printf (" %d", xyzzy); // or Obj-C equivalent.
xyzzy++;
}

如果你调用它很多次,它不会输出一长串零。它将输出:

0 1 2 3 4 ...

在 Apple 代码的情况下,这意味着日期格式化程序将按需创建(除非您在其他地方将其返回设置为nil)仅一次。如果对象创建不是一件微不足道的事情,这有时对性能很重要,但即使不是,持续重新创建可以简单地重复使用的东西也没有意义。

关于objective-c - 如果静态变量在上一行被初始化为 nil,为什么还要检查它是否为 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8772906/

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