应该得到20个错误......但是在编译时得到0 ...而不声明实例变量

时间:2010-07-12 17:53:34

标签: iphone xcode compiler-errors compiler-warnings instance-variables

在我的iPhone应用程序中,我经常在xCode v3.2.3中执行此操作:

  1. 在* .h文件中声明BOOL变量
  2. 在同一个* .h文件中使用@property。
  3. 在匹配的* .m文件中使用@sythesize。
  4. 我不小心忘了做#1 ......但它仍然很好。 0警告。 0错误。 0分析仪错误。

    怎么会这样?我的代码不应该在尝试使用变量的任何地方加载编译器错误吗?

2 个答案:

答案 0 :(得分:5)

这是新运行时的一个功能。有关详细信息,请参阅this question

答案 1 :(得分:2)

实例变量(ivars)的自动合成是OS X上的Objective-C 2.0运行时和新的iOS Objective-C运行时的一个特性。 @synthesize指令将在运行时自动创建必要的ivar,除非您自己声明了它。这是通过Objective-C 2.0的非脆弱的ivar支持实现的。因此,没有错误,你不应该收到它们。

最终,您不必在类的接口中声明ivars是一件好事。它们(可能)是特定于实现的细节,您不希望这些细节作为类的公共接口的一部分可见。请注意,使用类别类别,您也可以自动为“私有”属性合成ivars。