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