1
我被困在內存管理的東西中。請幫我解決我的問題。發佈對象是否有必要?
NSMutableArray *array = [[NSMutableArray alloc]init];
Object *obj = [[Object alloc]init];
[array addObject: obj];
[obj release];
是否需要釋放obj
在上面的代碼?
我被困在內存管理的東西中。請幫我解決我的問題。發佈對象是否有必要?
NSMutableArray *array = [[NSMutableArray alloc]init];
Object *obj = [[Object alloc]init];
[array addObject: obj];
[obj release];
是否需要釋放obj
在上面的代碼?
你的問題的答案是:是的,如果你不使用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
(及其同類)將保留的對象。
但我在這裏發佈了數組......我將它發送到發佈方法..請糾正我,如果我錯了 – Vinay
釋放數組與它無關。數組總是平衡釋放/保留。當然,忘記釋放數組會導致泄漏,無論對象是否被釋放。 – Krumelur
謝謝Krumelur – Vinay