IPhone NSM可变阵列内存管理

IPhone NSM可变阵列内存管理,iphone,memory-management,Iphone,Memory Management,作为iphonedev中的一个noob,只是想理解 在下面的代码中,发生了什么 City *newCity = [[City alloc] init]; newCity.name = @"name"; NSMutableArray *array = [[NSMutableArray alloc] init]; [array addObject:newCity]; City *getCity = [array objectAtIndex:0]; [city release]; [array

作为iphonedev中的一个noob,只是想理解

在下面的代码中,发生了什么

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检索城市时。我应该释放它吗?我想不会吧,因为我不拥有它?我应该这样想吗


另外,当我在数组上发布时,它是否会迭代数组中的所有对象并调用这些对象上的发布?

您所有的假设都是正确的

如果你从所有权的角度考虑,你永远是对的(除了一些记录良好的例外情况)


你所有的假设都是正确的

如果你从所有权的角度考虑,你永远是对的(除了一些记录良好的例外情况)


将对象添加到阵列时,阵列将保留该对象

如果您使用-[NSArray objectAtIndex:idx],则保留计数不会增加,您不会“拥有”您获得的对象,并且不需要释放它。除非,很明显,您选择在从数组中获取它之后保留它


是的,当数组被释放时,它将释放数组中的每个对象。(这与释放数组时释放它们不同。只有在释放数组时才会发生这种情况)

向数组中添加对象时,数组将保留该对象

如果您使用-[NSArray objectAtIndex:idx],则保留计数不会增加,您不会“拥有”您获得的对象,并且不需要释放它。除非,很明显,您选择在从数组中获取它之后保留它

是的,当数组被释放时,它将释放数组中的每个对象。(这与释放阵列时说它将释放它们不同。这仅在释放阵列时发生)

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