IPhone NSMutableArray内存管理

时间:2010-10-23 21:43:38

标签: iphone memory-management

成为Iphone开发中的菜鸟,只是想了解。

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

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来检索城市时。我想发布它吗?我假设不是因为我不拥有它?这是我应该怎么想的?

当我在数组上发布时,是否会遍历数组中的所有对象并在这些对象上调用一个发行版?

2 个答案:

答案 0 :(得分: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 :(得分:1)

将数组添加到数组时,数组将保留该对象。

你是对的,如果你使用 - [NSArray objectAtIndex:idx],保留计数不会增加,你不“拥有”你得到的对象,你不需要释放它。显然,除非你从数组中获得它后选择保留它。

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