为什么自定义setter的存在会破坏我的自定义getter?

时间:2014-06-17 04:02:33

标签: objective-c xcode cocoa properties getter-setter

我正在构建一个数据库迁移工具,这是一个Mac应用程序,我遇到了一个奇怪的问题,为一个属性制作自定义getter / setter。

对于名为parentStore的属性,我有这个getter:

- (CCStore *)parentStore {
    if (!_parentStore) {
        _parentStore = [[CCStore alloc] initWithStoreID:self.storeID];
    }

    return _parentStore;
}

非常直接,没有问题。

现在当我尝试制作一个自定义的设置器时,Xcode就会爆炸。

- (void)setParentStore:(CCStore *)parentStore {

}

我刚刚在这个setter上输入签名,而Xcode声称在getter中使用上面的_parentStore是一个未声明的标识符。我正在睡觉,所以我可以做一些愚蠢的事,但我无法弄明白发生了什么!!!

屏幕截图如下所示:

enter image description here

1 个答案:

答案 0 :(得分:2)

如果你覆盖了getter和setter,你基本上就是说你不希望llvm提供一个合成的支持ivar。这将是一种浪费,因为它不知道你是否会使用它。

只需在课堂上宣布ivar:

@implementation MyClass

@synthesize parentStore = _parentStore;

- (CCStore *)parentStore
{
  if (!_parentStore) {
    _parentStore = [[CCStore alloc] initWithStoreID:self.storeID];
  }
  return _parentStore;
}

- (void)setParentStore:(CCStore *)parentStore
{
  // do nothing
}

由于您忽略了setter,因此最佳做法是将其设为只读属性,然后根本不定义setter。