我正在浏览 Xcode 4.4 的发行说明并注意到这一点:
LLVM 4.0 编译器
Xcode 现在包括 Apple LLVM Compiler 4.0 版,包括以下新的Objective-C 语言功能:
- 默认@synthesize:未实现时自动合成一个@property
我对这个功能很感兴趣。它是如何工作的?我试过删了@synthesize
,还是不行。
我正在浏览 Xcode 4.4 的发行说明并注意到这一点:
LLVM 4.0 编译器
Xcode 现在包括 Apple LLVM Compiler 4.0 版,包括以下新的Objective-C 语言功能:
- 默认@synthesize:未实现时自动合成一个@property
我对这个功能很感兴趣。它是如何工作的?我试过删了@synthesize
,还是不行。
它确实有效,请确保在您的项目和目标设置中,编译器设置为 LLVM 4.0。然后,当您删除 @synthesize 行时,您可以通过两种方式访问它:
通过带有 self.myProperty 的访问器或通过带有 _myProperty 的相应实例变量(是的,下划线是自动添加的)。
在很多情况下它根本不起作用。这些都在这里列出为例外:
http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html
但对我来说最重要的一个叫做
具有非默认 Getter 和 Setter 的读写属性
这意味着,除非您的属性只是面向公众的 ivars,否则您需要包含 @synthesize。或者换一种说法,如果你很好地使用了封装并填充了那些 setter 和 getter,你就不能使用它。
稍后注意:我不确定此处指定的条件,但我发现对于我遇到的几乎所有情况都有一个自动合成的 ivar。