在所谓的“现代 Objective-C”之前,在类别中创建新属性时,我们需要实现 setter 和 getter 方法。现在,我们不必做 @synthesize
;编译器将自动创建方法和实例变量。
但通常情况下,我们不能向类别中添加实例变量,那么如果我们使用现代 Objective-C 向类别中添加新属性会怎样?编译器会为我们创建一个 ivar 吗?
最佳答案
您可以在类别中声明一个属性,这等同于声明 getter 和(如果是读写)setter 选择器。
编译器不会在您的类别实现中自动合成 getter 和 setter 方法。如果您没有在类别实现中显式定义它们,编译器将发出警告。您可以在类别实现中使用 @dynamic
来抑制警告。您不能在类别实现中使用 @synthesize
;如果您尝试,编译器将发出错误。
编译器不会为类别中声明的属性添加实例变量。您不能在类别中显式添加实例变量,也不能欺骗编译器使用属性来执行此操作。
我使用针对 iOS 6.0 的 Xcode 4.5.1 测试了我的声明。
关于objective-c - 编译器会为类别中声明的属性自动合成一个 ivar 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12920731/