我正在看以下苹果示例源代码:
/* Cache the formatter. Normally you would use one of the date formatter styles (such as NSDateFormatterShortStyle), but here we want a specific format that excludes seconds. */ static NSDateFormatter *dateFormatter = nil; if (dateFormatter == nil) { dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"h:mm a"]; }
试图找出:
为什么要使用static关键字?
如果在每次调用方法时将其设置为nil,这相当于缓存变量.
代码来自Tableview Suite演示中的示例4
静态变量在重复调用函数时保留其赋值.它们基本上就像只对该功能"可见"的全局值.
但初始化语句只执行一次.
此代码在第一次使用函数时将dateFormatter初始化为nil.在对函数的每次后续调用中,都会根据dateFormatter的值进行检查.如果未设置(仅在第一次时为true),则会创建一个新的dateFormatter.如果已设置,则将使用静态dateFormatter变量.
值得熟悉静态变量.它们可以非常方便但也有缺点(在这个例子中,例如,不可能释放dateFormatter对象).
只是一个提示:有时,在代码中放置断点并查看正在发生的事情可能很有教育意义.随着程序复杂性的增加,这将成为一项宝贵的技能.
" static
"在功能上意味着"不要在每次通过时评估等号右侧的东西,而是使用其先前的值"在这种情况下.
使用这个巨大的力量负有很大的责任:你冒着使用大量内存的风险,因为这些东西永远不会消失.除了像这样的情况之外,它很少适用NSDateFormatter
.