【问题标题】:IPhone NSMutableArray memory managementiPhone NSMutableArray 内存管理
【发布时间】:2010-10-23 21:43:37
【问题描述】:

作为 Iphone dev 的菜鸟,只是想了解一下。

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

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

此外,当我在数组上释放时,它是否会遍历数组中的所有对象并在这些对象上调用释放?

【问题讨论】:

    标签: iphone memory-management


    【解决方案1】:

    你所有的假设都是正确的。

    如果您从所有权的角度考虑,那么您永远是对的(除了一些有据可查的例外情况)。

    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
    

    【讨论】:

      【解决方案2】:

      当你将一个对象添加到数组中时,数组会保留该对象。

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

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

      【讨论】:

        猜你喜欢
        • 2011-09-06
        • 2010-10-02
        • 2011-07-01
        • 1970-01-01
        • 2011-04-10
        • 2011-10-10
        • 2010-10-28
        相关资源
        最近更新 更多