【发布时间】:2014-07-17 20:30:13
【问题描述】:
我正在阅读 Apple 官方网站上关于在Apple 合成属性的教程。摘录如下:
除非您另外指定,否则合成的实例变量与属性具有相同的名称,但带有下划线前缀。例如,对于名为 firstName 的属性,合成的实例变量将称为 _firstName。
然而,后来,它说:
重要提示:如果您使用 @synthesize 而不指定实例变量名称,如下所示: @synthesize firstName; 实例变量将具有与属性相同的名称。 在此示例中,实例变量也将称为
firstName,不带下划线。
这些陈述似乎存在分歧。当我像synthesize numerator 一样使用synthesize,然后尝试使用_numerator 时,它显示以下错误:use of undeclared identifier _numerator。
知道我做错了什么吗?
【问题讨论】:
-
你不需要
@synthesize与现代 Objective-c (协议中的属性除外)...只需省略它,你的 iVar 将默认为下划线前缀。 -
你能详细解释一下吗?如果我不使用
synthesize,并且也不为变量声明setter 和getter,它们将如何访问? -
是的,这似乎确实有效..
-
从 Xcode 4.4 开始,Apple LLVM 编译器将隐式合成未使用 @synthesize 显式合成的属性。
-
这两个陈述没有分歧(可以根据您的解释来证明)。第一个语句是指隐式综合,而后一个语句是指显式综合。
标签: objective-c