2012-05-01 42 views
0

我有点困惑,为什么我不能初始化一个getter这样:为什么我不能在Objective C中以这种方式初始化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时没有问题。

+1

在getter的堆栈中使用self.stack将导致一个循环。 –

回答

5

问题出在下面一行:

if (self.stack == nil) 

这相当于

if ([self stack] == nil) 

所以你调用内部本身和在无限递归结果中的getter方法。您可以删除通过解决伊娃本身调用的getter:

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

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

0

调用此行

if (self.stack == nil) { 

它返回到确切的方法,它创建了一个无限循环。只要删除自己。

0

什么你写就相当于是这样的:

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

显然功能一遍遍自称,创建一个无限循环并导致崩溃

相关问题