gpt4 book ai didi

iphone - 这段 objective-c 在做什么?

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:19 25 4
gpt4 key购买 nike

我不太确定这是在做什么。 dateFormatter 只能在第一次设置吗?

static NSDateFormatter *dateFormatter = nil;

if (dateFormatter == nil) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
}

通常我会读到它的意思是,将某些东西设置为 nil,然后检查它是否为 nil,但是如果我在条件内使用 NSLog,它只会被调用一次吗?

如果你能更深入地解释 static,我会加分,我知道它创建了一个全局变量(?),但仅此而已。

最佳答案

不,static 不会使 dateFormatter 成为类的一部分。它可能看起来像那样,但是 static 不是 Objective-C 的特性,并且对类一无所知。

static 是标准 C 语言的特性。请记住,Objective-C 只是 C 的扩展。如果在方法中使用 static,它将创建一个仅在该方法中可见的全局变量。

也就是说这个变量不是分配在栈上而是分配在数据段。在方法中本地定义的变量(非静态变量)与方法调用完成后返回的代码地址一起放在堆栈上 - 因此当执行离开方法时,本地方法的变量就消失了。在此方法中,dateFormatter 始终表示内存中的同一位置。

在这种情况下使 dateFormatter 静态化的目的是提高性能 - 您总是使用相同的格式化程序来格式化日期,因此每次都重新创建该格式化程序没有意义,因此它是仅创建一次并保存到全局变量中。

关于iphone - 这段 objective-c 在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3766752/

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