2012-10-02 71 views
2

我有一個伊娃,這是一個NSMutableArray。我見過一些人使用這個功能,以此來初始化數組:正確的方式初始化NSMutableArray

- (NSMutableArray *)varArray 
{ 
    if (!varArray) 
     varArray = [[NSMutableArray alloc]init]; 

    return varArray; 
} 

和數組在dealloc釋放。

當我試圖做到這一點時,有時數組被初始化,有時不會。

那麼,我問的是,這是一個很好的方法來初始化伊娃NSMutableArray,或者是它更好地做到這一點:varArray = [[[NSMutableArray alloc]init]autorelease];呢?

+1

當你說「有時數組已初始化,有時不是」時,如何訪問數組? – neilvillareal

+0

此外......你知道是否在對象的查詢之間釋放對象嗎? – Stunner

回答

1

做這一行:

varArray = [[NSMutableArray alloc]init];

始終是好的,但在其功能是真正重要的事情。看起來你正在初始化它在變量的setter中,所以無論你何時查詢那個實例變量,它都應該始終存在......理論上。

[varArray dealloc]; 
varArray = nil; 

這將確保您的if (!varArray)檢查將是:但是,如果你只是dealloc的伊娃,而不將其設置爲nil所以下面將明確重置伊娃指針,以便dealloced當它被保證是零,可能會出現的問題正確。

+0

哦!所以這一定是數組有時未被初始化的原因。我會在接受你的回答之前先嚐試。謝謝! –

0

那麼,我問的是,這是一個很好的方法來初始化伊娃的NSMutableArray

簡單地實現對象的指定初始化和初始化數組有:

- (id)init 
{ 
    self = [super init]; 
    if (0 == self) 
    return 0; 
    varArray = [NSMutableArray new]; 
    return self; 
} 
+0

嗨。你能解釋爲什麼它不是初始化數組的好方法? –

+0

@AnnaFortuna當然。因爲沒有理由懶得這樣做。如果這是一項昂貴的操作(例如耗盡磁盤或網絡),那將是另一個考慮因素。然而,它只是一個空陣列。延遲初始化只會引入不必要的複雜性,這使得維護更加困難,並且是一個漏洞抽象。在init中創建它,並在dealloc中銷燬它。完成。不變性是強大的/簡單的 - 消除一類線程問題,消除潛在的內存管理問題。要麼消除或簡化制定者。消除運行時檢查。等等...... – justin

+1

我明白了。感謝您的解釋! –