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

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

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

最佳答案

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

但是,如果您显式定义自己的getter和setter方法,则编译器将不再自动生成ivar。您的解决方案是显式声明您自己的ivar。您不需要@synthesize行,只需声明ivar。

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

顺便说一句-这不是Xcode 4.6.2中的新行为。自从编译器支持自动合成ivars以来,这就是事实。

关于objective-c - 为自动综合属性创建 setter/getter 方法时,编译器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16107308/

10-14 20:24