在类的接口中定义属性后,我使用自动生成的_property
方法创建一个setter方法。一切都很好。然后我为同一个属性创建一个getter方法。一旦我这样做,编译器就会抛出一个错误,_property
没有在我使用它的任何地方定义。
如果我只定义了getter或setter,一切正常,但是一旦我定义了两者,_property
就不复存在了。
如果我将@synthesize property = _property;
添加到我的实现顶部,问题就解决了,但这让我感到难过。
答案 0 :(得分:4)
这很正常。如果声明属性,编译器通常会自动合成ivar以及getter和setter方法。
但是如果你明确定义了自己的getter和setter方法,编译器就不再自动生成一个ivar。您的解决方案是明确声明自己的ivar。您不需要@synthesize
行,只需声明ivar。
这种行为的原因是很可能有一个实际上不使用ivar的属性的实现。因此,如果您同时定义了setter和getter,编译器会根据您的需要决定是否需要ivar。
BTW - 这不是Xcode 4.6.2中的新行为。自从编译器支持自动合成的ivars以来,这一直是真的。