Xcode 4在使用@属性时自动生成iVar,我可以在哪里find这个function的官方文档?

我读过“Xcode中有什么新东西”,但我找不到这个function的官方解释。 我在哪里可以find官方的解释? 哪些文档? 谢谢。

您可以在“属性实现指令”下的Objective-C编程语言:声明的属性中的苹果文档中find它。 是否自动合成ivar取决于您正在使用的运行时间:

访问器综合的行为依赖于运行时(见“运行时差异”):

  • 对于传统运行时,实例variables必须已经在当前类的@interface块中声明。 如果存在与该属性同名的实例variables,并且其types与该属性的types兼容,则使用该variables,否则会出现编译器错误。
  • 对于现代运行时(请参阅“Objective-C运行时编程指南”中的“运行时版本和平台”),将根据需要合成实例variables。 如果同名的实例variables已经存在,则使用它。

iOS总是使用现代运行时,所以你永远不需要明确地声明ivars。

假设你的意思是它自动生成一个ivar和getter和setter方法,即使你省略@synthesize :这被不同地称为默认属性综合,自动属性综合和属性自动合成。

没有很多文件。 据我所知, 没有官方文件说明它是如何工作的,只是存在的事实而已。

这真是一个铿锵的function,而不是一个Xcodefunction。 它在Xcode 4.0 DP 4随附的版本中简要地出现,但由于错误,不久之后被删除。 它再次出现在Xcode 4.4附带的clang版本中。 我认为这是增加它的提交 。

您可以在Objective-Cfunction可用性索引中find它。

在Clang语言扩展中也提到了这一点。

从实验:

  • 如果你没有明确地@synthesize一个属性,它会生成一个实例variables,它会自动生成与声明的属性相同的types(和ARC,所有权限制)的伊娃。 伊娃的名字将是一个下划线( _ ),后面是声明的属性名称。

  • 如果你没有显式的@synthesize readonly属性,并且你包括一个明确的getter方法,那么clang 不会自动为你生成一个ivar。

  • 如果你没有显式的@synthesize一个readwrite属性,并且你同时包含一个明确的getter和一个显式的setter,那么clang将不会自动为你生成一个ivar。

但是我不知道这些行为的官方文件。

实际上,这是编译器的一部分。

您可以在LLVM 规范网站上阅读 。

我也提请你注意cocoa的编码指南 ,build议:

  • 避免显式声明公共实例variables。

    开发人员应该关注对象的接口,而不是关于如何存储数据的细节。 您可以避免使用声明的属性显式声明实例variables并合成相应的实例variables。