2013-02-09 60 views
2

後,我有以下方法:目標C:無限getter方法循環轉換爲ARC

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

我有這個非ARC,並能正常工作:如果self.someArray在第2行是nil,然後去提前並實例化它。

但是,在我切換到ARC後,當它到達第2行時,它回到第1行,循環繼續。

任何幫助將不勝感激。 謝謝。

回答

5

適當的形式是

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

你可以離開了@sythesize線,默認情況下,變量名稱將前面的下劃線,你可以使用代碼的其餘部分原樣。 – 2013-02-09 00:59:39

+3

很難想象這是如何工作的。這個問題與ARC無關。 – 2013-02-09 01:13:20

2

發生什麼事是您正在訪問器中調用訪問器方法。但是如果每個訪問者自稱,就永遠不會打破這個循環。

使用自動合成的屬性來避免這種情況:

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

self.someArray調用吸氣,因此,無限循環。在該方法中使用_someArray(假設您使用屬性提供的自動ivar,否則使用任何支持變量)。