2010-10-23 110 views
1

作爲Iphone開發者的一個小白,只是試圖理解。IPhone NSMutableArray內存管理

在下面的代碼中,發生了什麼事?

City *newCity = [[City alloc] init]; 
newCity.name = @"name"; 

NSMutableArray *array = [[NSMutableArray alloc] init]; 
[array addObject:newCity]; 

City *getCity = [array objectAtIndex:0]; 

[city release]; 
[array release]; 

當你向數組中添加一個對象時,數組是做一個保留還是它創建一個全新的實例?

另外當我做一個objectAtIndex檢索城市。我想釋放它嗎?我假設沒有,因爲我不擁有它?這是我應該怎麼想的?

另外,當我在數組上發佈時,是否遍歷數組中的所有對象並調用這些對象上的發佈?

回答

3

你所有的假設都是正確的。

如果你認爲所有權你永遠是對的,(除了一些有據可查的例外)。

City *newCity = [[City alloc] init]; //newCity is +1 
newCity.name = @"name"; //name +1 

NSMutableArray *array = [[NSMutableArray alloc] init]; //array +1 
[array addObject:newCity]; //new city +1 

City *getCity = [array objectAtIndex:0]; //no memory change 

[city release]; //assuming this was supposed to be newCity, newCity -1, 
[array release]; //array -1, array deallocs, calling release on all its objects, newCity -1, deallocs 
1

將對象添加到數組時,數組將保留該對象。

如果您使用 - [NSArray objectAtIndex:idx],則保留計數不會遞增,您不會「擁有」您獲得的對象,而且您也不需要釋放它。除非你顯然在你從數組中獲得後才選擇保留它。

是的,當數組被釋放時,它將釋放數組中的每個對象。 (這與釋放陣列時釋放它們並不相同,只有當數組被釋放時纔會發生這種情況)