成为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来检索城市时。我想发布它吗?我假设不是因为我不拥有它?这是我应该怎么想的?
当我在数组上发布时,是否会遍历数组中的所有对象并在这些对象上调用一个发行版?
答案 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],保留计数不会增加,你不“拥有”你得到的对象,你不需要释放它。显然,除非你从数组中获得它后选择保留它。
是的,当数组被释放时,它将释放数组中的每个对象。 (这与释放数组时释放它们的说法不一样。只有在数组被释放时才会发生这种情况。)