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

时间:2013-02-09 00:53:31

标签: ios objective-c automatic-ref-counting

我有以下方法:

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

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

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

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

正确的形式是

@synthesize someArray = _someArray;
- (NSMutableArray *)someArray {
    if (!_someArray) {
        _someArray = [NSMutableArray array];
    }
    return _someArray;
}

答案 2 :(得分:2)

发生的事情是您在访问器内调用访问器方法。但是如果每个访问者都会自己调用,那么你永远不会打破这个循环。

使用自动合成属性来避免这种情况:

-(NSMutableArray *)someArray{ // line 1
    if(_someArray == nil){ // line 2
        _someArray = [[NSMutableArray alloc]init];
    }  
    return _someArray;
}