使用@属性时,Xcode 4会自动生成iVars,在哪里可以找到此功能的官方文档?

Li *_*min 3 xcode properties objective-c llvm ios

我读过"Xcode中的新功能",但我找不到此功能的官方解释.我在哪里可以找到官方解释?哪个文件?谢谢.

rob*_*off 14

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

没有很多文档.据我所知,没有关于它是如何工作的官方文件,只是它存在的事实.

它真的是一个铿锵的功能,而不是Xcode功能.它出现在Xcode 4.0 DP 4附带的版本clang中,但由于错误而很快被删除.它再次出现在Xcode 4.4附带的clang版本中. 我认为这是添加它的提交.

您可以在Objective-C功能可用性索引中找到它.

它也在Clang Language Extensions中提到过.

从实验:

  • 如果您没有明确@synthesize表示属性并且它生成实例变量,它将自动生成与声明的属性具有相同类型(并且在ARC下,所有权限定)的ivar.ivar名称将是一个下划线(_),后跟声明的属性名称.

  • 如果您没有明确@synthesize表示readonly属性,并且确实包含了显式的getter方法,则clang将不会自动为您生成ivar.

  • 如果你没有明确的@synthesize一个readwrite属性,你做的包括两个明确的getter和明确的二传手,然后再次铿锵将不会自动为您生成伊娃.

但我不知道这些行为的任何官方文件.


tor*_*ons 8

您可以在Objective-C编程语言的Apple文档中找到此信息: "属性实现指令"下的声明属性.是否自动合成ivar取决于您使用的运行时间:

访问者合成的行为有所不同,这取决于运行时(另请参阅"运行时差异"):

  • 对于遗留运行时,实例变量必须已在当前类的@interface块中声明.如果存在与该属性同名的实例变量,并且其类型与属性的类型兼容,则使用它 - 否则,您将收到编译器错误.
  • 对于现代运行时(请参阅Objective-C运行时编程指南中的"运行时版本和平台"),可根据需要合成实例变量.如果已存在同名的实例变量,则使用它.

iOS总是使用现代运行时,因此您永远不需要显式声明ivars.