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。