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 = 1
和 foo.Bar = 1
都变成了 [foo setBar:1]
。所以它适用于 setters,但不适用于吸气剂。
似乎这种行为在 8.3 中发生了变化。
在 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 = 1
和 foo.Bar = 1
都变成了 [foo setBar:1]
。所以它适用于 setters,但不适用于吸气剂。
似乎这种行为在 8.3 中发生了变化。