我有点困惑为什么我不能用这种方式初始化 getter:
@synthesize stack = _stack;
- (NSMutableArray *) stack
{
if (self.stack == nil) {
self.stack = [[NSMutableArray alloc] init];
}
return self.stack;
}
我知道如果我用 _stack 替换 self.stack,它会工作得很好,但我不知道为什么我不能使用 self.stack。不过,我稍后在代码中使用 self.stack 没有问题。
最佳答案
问题出在以下行:
if (self.stack == nil)
相当于
if ([self stack] == nil)
因此,您在自身内部调用 getter 方法,这会导致无限递归。您可以通过寻址 ivar 本身来移除对 getter 的调用:
- (NSMutableArray *) stack
{
if (_stack == nil) {
_stack = [[NSMutableArray alloc] init];
}
return _stack;
}
关于objective-c - 为什么我不能在 Objective C 中以这种方式初始化 getter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403259/