2012-10-16 44 views
1

我被困在內存管理的東西中。請幫我解決我的問題。發佈對象是否有必要?

NSMutableArray *array = [[NSMutableArray alloc]init]; 
Object *obj = [[Object alloc]init]; 
[array addObject: obj]; 
[obj release]; 

是否需要釋放obj在上面的代碼?

回答

5

你的問題的答案是:是的,如果你不使用ARC。如果你正在編寫一個新的應用程序,你應該認真考慮使用ARC。

Objective-C中的容器對象總是平衡其保留/釋放計數。換句話說,你應該總是管理內存,就像你沒有添加對象一樣,並確保你自己的代碼平衡其保留計數。請注意,這是一個約定,並未強制執行,但您始終可以信任內置類以遵循此約定。此外,您可以執行靜態分析(XCode中的Cmd + Shift + B)來檢測這些問題。它會在你的代碼中指出這一點。

的情況下正確的代碼以上將是:只要是在集合中

NSMutableArray *array = [[NSMutableArray alloc]init]; 
Object *obj = [[[Object alloc]init]autorelease]; 
[array addObject: obj]; 

NSMutableArray *array = [[NSMutableArray alloc]init]; 
Object *obj = [[Object alloc]init]; 
[array addObject: obj]; 
[obj release]; 

因爲NSMutableArray(及其同類)將保留的對象。

+0

但我在這裏發佈了數組......我將它發送到發佈方法..請糾正我,如果我錯了 – Vinay

+0

釋放數組與它無關。數組總是平衡釋放/保留。當然,忘記釋放數組會導致泄漏,無論對象是否被釋放。 – Krumelur

+0

謝謝Krumelur – Vinay