1

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

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

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

4

1 回答 1

4

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

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

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

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

于 2013-04-19T14:50:41.990 回答