iOS 8.3 SDK 在执行 属性 声明和区分大小写方面的变化

iOS 8.3 SDK changes in enforcing property declaration and case sensitivity

在 8.3 之前,这段代码存在于我正在处理的代码库中(当然我不知道)

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
nf.NumberStyle = NSNumberFormatterDecimalStyle;

现在,检查 class 引用显示 属性 的名称实际上是

nf.numberStyle

但出于某种原因,这是在 8.2 中编译的,而不是在 8.3 中编译的。我还看到 8.3 迫使我使用 @dynamic 来覆盖超级 class 的 属性 setter。我知道我应该这样做,我会做出改变,但它在 8.2 中有效。

我的代码库中有很多这样的错误。我查看了 release notes,但没有看到 Apple 在任何地方记录对 SDK 的这些更改。我缺少一些文档吗?是否有更详尽的清单列出 Apple 所做的所有更改?

这是一个很好的问题。也许编译器处理 @properties 的方式在 8.3 中发生了变化。这个post很好的解释了为什么之前a属性的setter首字母不区分大小写:

基本上好像 foo.bar = 1foo.Bar = 1 都变成了 [foo setBar:1]。所以它适用于 setters,但不适用于吸气剂。

似乎这种行为在 8.3 中发生了变化。