objective-c - 编译器会为类别中声明的属性自动合成一个 ivar 吗?

标签 objective-c objective-c-category declared-property

在所谓的“现代 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/

相关文章:

ios - 苹果 map 上的简单标记聚类

ios - 更好的子类 UIElements 或创建类别来自定义

ios - 如何在.h 文件中的辅助@interface 中调用方法

objective-c - 删除 @synthesize 语句时出现编译器错误 "use of undeclared identifier"

objective-c - 基于 View 的 NSTableView 具有 float 组行

ios - 需要有关内存管理的帮助

iphone - Objective-c 语法高亮

ios - 在 iOS 中移动 UICollectionView 的单元格?

cocoa-touch - 为什么Apple使用分配而不是weak来存储委托(delegate)?

objective-c - 我在支持原子属性的论点中是否遗漏了任何要点?