我正在构建一个数据库迁移工具,这是一个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
是一个未声明的标识符。我正在睡觉,所以我可以做一些愚蠢的事,但我无法弄明白发生了什么!!!
屏幕截图如下所示:
答案 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。