2011-01-26 194 views
0

我想在我的代碼中得到一些內存泄漏,我該如何修復內存泄漏。iPhone內存泄漏問題?

dashboard = [[NSMutableArray alloc] init]; 
[dashboard addObject:[[NSDictionary alloc] initWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@" Head",@"Title",nil]; // memory leaks here. 


if (theConnection) { 
    receiveData = [[NSMutableData data] retain]; //memory leaks here. 
} 

但是我已經發布了dealloc - [receiveData release];但是發生了內存泄漏。我知道保留,計數增加,但我怎麼才能正確地發佈數據。

謝謝!

回答

2

我認爲你的泄漏線:

[dashboard addObject:[[NSDictionary alloc] initWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@" Head",@"Title",nil]; 

只是改變它到

[dashboard addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@" Head",@"Title",nil]; 

addObject保留該對象,因此您可以使用便捷創建方法,它們自動釋放它們創建的對象。

另一個可能的泄漏...如果您將receiveData定義爲帶有retain屬性的屬性,則不需要明確地調用retain。您可以撥打self.recieveData = [NSMutableData data]。這將保留它。當然你仍然需要在dealloc中釋放它。

EDIT顯示代碼:

NSMutableArray *anArray = [[[NSMutableArray alloc] init] autorelease]; 
[sections setValue:anArray forKey:display_date]; 
2

dashboard addObject:[[NSDictionary alloc] initWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@" Head",@"Title",nil]; 你已經調用了init方法 - 那麼你就是對象的所有者。當你把它放到數組中時 - 保留也被調用。只需調用autorelease來修復泄漏。

receiveData = [[NSMutableData data] retain]; - 如果您打電話給release,此對象將在超出範圍時被刪除。如果你會寫

receiveData = [NSMutableData data]; 

它時,將自動

編輯

如果您使用的是他們init字方法,那麼你是這樣的對象的所有者刪除了的範圍和他們不會被自動刪除,直到你打電話給release方法。如果你不想擁有這個對象,用一些靜態方法來創建它。例如:

NSMutableArray *array = [NSMutableArray arrayWithObjects: ... , nil]; 

這與調用

NSMutableArray *array = [[[NSMutableArray alloc] initWithObjects: ... , nil] autorelease]; 

自動釋放意味着該對象將接收release方法時超出範圍 - 如果它不保留將被自動刪除

+0

感謝您的答覆。在這種情況下,「[節setValue:[[NSMutableArray alloc] init] forKey:display_date];」 //內存泄漏在這裏。我怎樣才能修復泄漏? – Pugal 2011-01-26 17:44:58