我有以下方法:
-(NSMutableArray *)someArray{ // line 1
if(self.someArray == nil){ // line 2
self.someArray = [[NSMutableArray alloc]init];
}
return self.someArray;
}
我在非ARC中有这个,并且它工作正常:如果第2行中的self.someArray
是nil
,那么继续并实例化它。
但是,在我切换到ARC后,当它到达第2行时,它会返回到第1行,然后循环继续。
任何帮助将不胜感激。 感谢。
答案 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;
}