新的Apple LLVM 4.0“默认合成”功能如何运作?

时间:2012-07-26 13:46:11

标签: objective-c llvm declared-property

我正在浏览Xcode 4.4的发行说明并注意到这一点:

  

LLVM 4.0编译器

     

Xcode现在包含Apple LLVM Compiler 4.0版,包括以下newObjective-C语言功能:

     
      
  • 默认@synthesize:未实现时自动合成@property
  •   

我对这个功能很感兴趣。它是如何工作的?我试过删除@synthesize,但它不起作用。

2 个答案:

答案 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几乎适用于我遇到的每种情况。