目标C:转换为ARC后的无限getter方法循环

yee*_*nny 2 objective-c ios automatic-ref-counting

我有以下方法:

-(NSMutableArray *)someArray{ // line 1
    if(self.someArray == nil){ // line 2
        self.someArray = [[NSMutableArray alloc]init];
    }  
    return self.someArray;
}
Run Code Online (Sandbox Code Playgroud)

我在非ARC中有这个,它工作正常:如果self.someArray在第2行nil,那么继续并实例化它.

但是,在我切换到ARC后,当它到达第2行时,它会返回到第1行,然后循环继续.

任何帮助将不胜感激.谢谢.

rde*_*mar 5

self.someArray调用getter,因此调用无限循环.改为在该方法中使用_someArray(假设您正在使用属性提供的自动ivar.否则,请使用您的后备变量).


dan*_*anh 5

适当的形式是

@synthesize someArray = _someArray;
- (NSMutableArray *)someArray {
    if (!_someArray) {
        _someArray = [NSMutableArray array];
    }
    return _someArray;
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以省略@sythesize行,默认情况下,变量名称将具有前面的下划线,您可以按原样使用其余代码. (3认同)
  • 很难想象以前这是如何运作的.这个问题与ARC无关. (3认同)