这件目标做什么?

One*_*ake 1 c iphone objective-c

我不确定这是做什么的.dateFormatter第一次只能设置吗?

static NSDateFormatter *dateFormatter = nil;

if (dateFormatter == nil) {
    dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
} 
Run Code Online (Sandbox Code Playgroud)

通常我会读到这意味着,设置为零,然后检查它是否为零,但如果我在条件内的NSLog,它只被调用一次?

额外的点,如果你可以更深入地解释静态,我知道它创建一个全局变量(?),但这就是它.

Mic*_*hal 7

不,static不会dateFormatter参加课程.它可能看起来像那样,但static不是Objective-C的功能,对类没有任何了解.

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

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

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