0

我有点困惑为什么我不能以这种方式初始化吸气剂:

@synthesize stack = _stack;

- (NSMutableArray *) stack
{
    if (self.stack == nil) {
        self.stack = [[NSMutableArray alloc] init];
    }
    return self.stack;
}

我知道如果我用_stack 替换self.stack,它会工作得很好,但我就是不知道为什么我不能使用self.stack。我稍后在代码中使用 self.stack 没有问题。

4

4 回答 4

5

问题出在以下行:

if (self.stack == nil) 

这相当于

if ([self stack] == nil)

所以你在自己内部调用你的getter方法,这会导致无限递归。您可以通过寻址 ivar 本身来删除调用 getter:

- (NSMutableArray *) stack
{
    if (_stack == nil) {
        _stack = [[NSMutableArray alloc] init];
    }
    return _stack;
}
于 2012-05-01T19:44:40.510 回答
0

self.stack调用您正在创建的吸气剂。通过self.stack在 getter 方法中使用,您正在创建一个无限循环,这是不可取的。

于 2012-05-01T19:44:18.047 回答
0

调用此行时

if (self.stack == nil) {

它返回到确切的方法并创建了一个无限循环。只需删除自我。

于 2012-05-01T19:44:38.593 回答
0

你写的相当于:

- (bool) thisIsTrue
{
      if ([self thisIsTrue])
      {
          //
      }
}

显然,该函数一遍又一遍地调用自己,创建一个无限循环并导致崩溃

于 2012-05-01T19:48:45.977 回答