关于@synthesize
首先, @synthesize myLocalVar = _myLocalVar; 这句话是显式帮你省掉了一个 getter 方法和一个 setter 方法. 两个方法长什么样不赘述.
其次, 从某个版本的 Xcode 开始, 你连 @synthesize 这句话也不需要写了, 但是请注意, 这只是一个 IDE 的特性. 你不需要手动合成, 不代表 @synthesize 不作用了, 仅仅是让你能少写这一句话, 而 Xcode 帮你补全了.
再次, @synthesize 仅仅是一个 clang 的 Objective-C 语言扩展 (autosynthesis of properties), 然后clang恰好是 Xcode 的默认编译器. 也就是说, 如果你换成了 gcc, 那么这个特性也就不复存在了.
基于上述, 如果你使用了自己的文本编辑器, 然后用自己用 clang 从命令行编译, @synthesize 这一句话是需要自己写的.
最后, 有如下例外
- 对于
readwrite类型的属性, 你自行实现了getter和setter - 对于
readonly类型的属性, 你自行实现了getter以上两种情况, 你一旦自行实现了对应的getter或setter, 对于本文的myLocalVar例子, 你将发现_myLocalVar没有了, 意味着你需要@synthesize一下. dynamic与synthesize是互斥的@protocol中声明的属性category中声明的属性- 你覆盖(
overridden)父类的属性时, 必须手动synthesize.
参考资料: 1, When should I use @synthesize explicitly? 2, @dynamic 与 @synthesize 关键词详解