Iphone 这个objective-c在做什么?
我真的不知道这是怎么回事。dateFormatter仅可在第一次设置吗Iphone 这个objective-c在做什么?,iphone,objective-c,c,Iphone,Objective C,C,我真的不知道这是怎么回事。dateFormatter仅可在第一次设置吗 static NSDateFormatter *dateFormatter = nil; if (dateFormatter == nil) { dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; [dateFormatter setDateS
static NSDateFormatter *dateFormatter = nil;
if (dateFormatter == nil) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
}
通常我会把它理解为,将某物设置为nil,然后检查它是否为nil,但是如果我在该条件下记录,它只会被调用一次
额外要点如果你能更深入地解释静态,我知道它创建了一个全局变量(?),但仅此而已。静态意味着它是一个全局变量,但是在这种情况下,只能在函数中访问它,静态块只会发生一次。其余的每次都会发生,但由于检查它是否已经初始化,“if”中的块也会发生一次。
因此,唯一会多次运行的代码是在“if”条件下进行检查。Static意味着它是一个全局变量,但是在这种情况下,只能在函数中访问静态块一次。其余的每次都会发生,但由于检查它是否已经初始化,“if”中的块也会发生一次。
因此,唯一一段将多次运行的代码是签入“if”条件。dateFormatter是否仅可在第一次设置
static NSDateFormatter *dateFormatter = nil;
if (dateFormatter == nil) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
}
不,您可以设置格式,然后使用方法
stringFromDate:(NSDate*)aDate
将日期转换为具有格式的字符串。dateFormatter仅可在第一次设置吗
static NSDateFormatter *dateFormatter = nil;
if (dateFormatter == nil) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
}
不,您可以设置格式,然后使用方法stringFromDate:(NSDate*)aDate
将日期转换为具有格式的字符串。正如Michal所说,“静态”是标准C的一部分。它有两个同等重要的作用:
请参阅优秀的。不,
静态
不会使日期格式化程序成为类的一部分。看起来可能是这样,但是static
不是Objective-C的特性,对类一无所知
static
是标准C语言的特性。请记住,Objective-C只是C的一个扩展。如果在一个方法中使用了static
,它将创建一个仅在该方法中可见的全局变量
这意味着该变量不是在堆栈上分配的,而是在数据段中分配的。方法中本地定义的变量(非静态变量)与方法调用完成后返回的代码地址一起放在堆栈上-因此,当执行离开方法时,本地方法的变量就消失了。在此方法中,dateFormatter
始终表示内存中的相同位置
在这种情况下,将dateFormatter
设置为静态的目的是提高性能-您总是使用相同的格式化程序格式化日期,因此每次重新创建该格式化程序是没有意义的,因此它只创建一次并保存到全局变量中。否,static
不会使dateFormatter
成为类的一部分。看起来可能是这样,但是static
不是Objective-C的特性,对类一无所知
static
是标准C语言的特性。请记住,Objective-C只是C的一个扩展。如果在一个方法中使用了static
,它将创建一个仅在该方法中可见的全局变量
这意味着该变量不是在堆栈上分配的,而是在数据段中分配的。方法中本地定义的变量(非静态变量)与方法调用完成后返回的代码地址一起放在堆栈上-因此,当执行离开方法时,本地方法的变量就消失了。在此方法中,dateFormatter
始终表示内存中的相同位置
在这种情况下,将dateFormatter
设置为静态的目的是提高性能-您总是使用相同的格式化程序格式化日期,因此每次重新创建该格式化程序是没有意义的,因此它只创建一次并保存到全局变量中。它实际上不是类的一部分,甚至是该文件的C全局(或者更可能是它所在的函数/方法)。但是效果是一样的,我明白了。回答得很好。所以这条线,即使它在函数中属于类?是的,但只能从这个函数中理解,正如其他人所说,它不是类的一部分,而是某种私有全局,但作为一个概念,它可以被认为是类的一部分。对我来说,这类问题似乎引发了更多的问题。为什么如果它是一个全局变量,只有在该函数中才可访问,那么每次调用该函数时它不会被调用?全局意味着它存在于程序的上下文中,而不是实例的上下文中。这并不意味着它可以从任何地方访问。它实际上不是类的一部分,甚至不是该文件的C全局(或者更可能是它所在的函数/方法)。但是效果是一样的,我明白了。回答得很好。所以那条线,即使它在