为自动合成属性创建getter方法时出现编译器错误

时间:2013-04-19 14:45:35

标签: objective-c cocoa properties

在类的接口中定义属性后,我使用自动生成的_property方法创建一个setter方法。一切都很好。然后我为同一个属性创建一个getter方法。一旦我这样做,编译器就会抛出一个错误,_property没有在我使用它的任何地方定义。

如果我只定义了getter或setter,一切正常,但是一旦我定义了两者,_property就不复存在了。

如果我将@synthesize property = _property;添加到我的实现顶部,问题就解决了,但这让我感到难过。

1 个答案:

答案 0 :(得分:4)

这很正常。如果声明属性,编译器通常会自动合成ivar以及getter和setter方法。

但是如果你明确定义了自己的getter和setter方法,编译器就不再自动生成一个ivar。您的解决方案是明确声明自己的ivar。您不需要@synthesize行,只需声明ivar。

这种行为的原因是很可能有一个实际上不使用ivar的属性的实现。因此,如果您同时定义了setter和getter,编译器会根据您的需要决定是否需要ivar。

BTW - 这不是Xcode 4.6.2中的新行为。自从编译器支持自动合成的ivars以来,这一直是真的。