我注意到了最奇怪的事情。我正在玩NSTimer,在浏览Apple documentation时,我已经到达valid
属性here,并注意到此属性自iOS 8开始可用。这个事实由它拥有并不奇怪,但事实上4至6年前有关NSTimer的大量stackoverflow帖子指的是这个属性或建议使用它让我感到困惑:Example 1,example 2,{{ 3}}和其他许多人。
所以我的问题分为2:
valid
属性?提前致谢。
答案 0 :(得分:3)
Apple文档已经针对Swift进行了更新,这就是为什么它有Available in iOS 8.0 and later
的一些属性和方法,而它们肯定是以前的iOS版本。例如,在iOS 2.0中引入了NSTimer
。你可以安全地使用它。
答案 1 :(得分:2)
每个人都错过了真实的故事。查看NSTimer
(以及许多其他类)的iOS 8.0 API差异。
Apple做了一个巨大的重构,将许多API转换为使用属性而不是显式的setter / getter方法。
在iOS 8.0之前,NSTimer
有一个名为isValid
的方法。在iOS 8.0中,Apple删除了此方法并添加了只读属性valid
(使用getter方法名称isValid
声明。
由于iOS 8.0中的这种变化(以及许多喜欢它),文档会使许多API看起来好像刚刚添加到iOS 8.0中,即使它们可能已经存在了很长时间。
最终结果是文档现在对许多属性都非常误导。提交文档错误不太可能发生任何事情,因为此问题适用于数十个类和数百个属性/方法。
答案 2 :(得分:1)
我转到了NSTimer.h
文件并找到了
@property NSTimeInterval tolerance NS_AVAILABLE(10_9, 7_0);
- (void)invalidate;
@property (readonly, getter=isValid) BOOL valid;
@property (readonly, retain) id userInfo;
@end
无法看到NS_AVAILABLE
属性前面的valid
,可能是苹果文档有一些错误
我也提供了反馈来纠正它。