2011-01-11 88 views
0

我目前正在研究一個演示應用程序,所以我有點sl how如何完成任務,但是我運行「構建和分析」來查看我得到了多少泄漏,......以及有很多。如何從數組中釋放對象?

德proble的來源是,我有一個NSMutableArray的,我的一些對象添加到它:

NSMutableArray *arr = [[NSMutableArray alloc] init]; 
[arr addObject:[[MyObject alloc] initWithText:@"Option1"]]; 
// I have like 100 lines like that and 100 complains 

現在,Xcode的抱怨潛在的泄漏。

有人可以給我一些建議如何處理?

謝謝。

+0

您擁有您創建的任何對象(http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html%23//apple_ref/doc/uid/20000043- SW1)你是否在任何時候發佈arr?最後,你會更好地創建你的對象,除了addObject方法,傳遞它在addObject中,然後釋放它(請參閱這裏的答案:http://stackoverflow.com/questions/179665/nsmutablearray-destruction更多) – ndtreviv 2011-01-11 15:45:23

回答

3

問題是您正在分配一個您有責任發佈的實例MyObject。當你將它傳遞給數組時,數組也會保留這個對象,所以現在你和數組都必須釋放它。您可以簡單地使用autorelease對象,並且數組將保留它,直到從數組中移除對象或銷燬數組本身。

2

更換

[arr addObject:[[MyObject alloc] initWithText:@"Option1"]]; 

[arr addObject:[[[MyObject alloc] initWithText:@"Option1"] autorelease]]; 

大多數集合(數組,字典)自己加入到它們的對象。而且,由於您已將+alloc發送到MyObject,因此您也擁有剛被實例化的對象。正如內存管理規則所說,負責放棄對象所有權你自己。發送-autorelease到新實例化的對象將做到這一點。