我已经读过"What's new in Xcode",但是我找不到这个特性的官方解释。在哪里可以找到官方解释?哪些文档?谢谢。
发布于 2012-08-25 05:18:25
您可以在Objective-C Programming Language: Declared Properties的Apple文档中的"Property Implementation Directives“中找到这一点。是否自动合成ivar取决于您使用的运行时:
根据运行时的不同,访问器合成的行为也会有所不同(另请参阅“运行时差异”):
对于传统运行时,实例变量必须已在当前类的@
iOS总是使用现代的运行时,所以你永远不需要显式地声明ivar。
发布于 2012-08-25 05:13:35
假设您的意思是,即使您省略了@synthesize
,它也会自动为您生成ivar、getter和setter方法:这被称为默认属性合成、自动属性合成和属性自动合成。
没有太多的文档。据我所知,没有关于它是如何工作的官方文档,只是关于它存在的事实。
它实际上是一个clang特性,而不是一个Xcode特性。它曾在Xcode4.0DP 4附带的版本中短暂出现,但不久之后由于错误而被删除。它再次出现在Xcode4.4附带的clang版本中。我想是Here's the commit添加的。
您可以在Objective-C Feature Availability Index中找到它。
Clang Language Extensions也提到了这一点。
来自实验:
@synthesize
。ivar名称将是一个下划线(_
),后跟声明的属性名称。readonly
属性,并且您确实包含显式的getter方法,则clang将<>E118而不是自动为您生成ivar。如果您E220
没有显式地一个readwrite
属性,并且您包括两者都包含显式getter和显式setter,则E220
D24D25属性,并且您执行包括E128两者。包含显式getter和显式setter,包含显式getter和显式setter,如果您不显式地使用readonly
属性,并且您包含显式getter方法,则clang将自动为您生成ivar。然后再次点击will 自动为你生成一个ivar。但我不知道关于这些行为的任何官方文档。
发布于 2012-08-25 05:00:37
实际上,这是编译器的一部分。
您可以在LLVM
specification website中阅读它。
https://stackoverflow.com/questions/12119284
复制相似问题