我相信这张照片很能描述我的问题。如果我只定义如下的自定义getter
:
- (UIImage *) secondaryIconImage {
if (_secondaryIconImage) return _secondaryIconImage;
return nil;
}
然后我收到错误:'cannot pair a synthesized setter with a user defined getter
'。但是,如果我尝试声明setter
,我的代码根本不会编译:
- (void) setSecondaryIconImage:(UIImage *)secondaryIconImageVar {
_secondaryIconImage = secondaryIconImageVar;
}
特别是这给了我编译时错误'Use of undeclared identifier _secondaryIconImage
'
我想也许一旦我宣布了我必须自己合成实例变量的setter,所以我尝试添加:
@synthesize _secondaryIconImage;
这没有帮助。这里发生了什么,我该如何解决?
P.S。我有一个自定义的getter因为我最终需要做一些更好的事情,但我没有看到使这个例子复杂化的理由,因为即使这个基本的例子也给我一个问题。
答案 0 :(得分:2)
正如它所指出的,你不能在没有setter的情况下定义getter。 (你的吸气剂当然没有意义,所以我认为你的实际吸气剂更复杂?)
如果你定义了getter和setter,那么你就不会合成任何东西(因为你已经写好了所有内容,没有任何东西可以合成),并且不会为你定义任何ivar。如果需要,您需要自己定义它。
您需要通过@synthesize
明确请求ivar(感谢Richard Ross让我直截了当):
@synthesize secondaryIconImage = _secondaryIconImage;
您的代码要求提供名为_secondaryIconImage
的属性,因此ivar将为__secondaryIconImage
。