Objective-c NSMutableArray释放行为

时间:2010-12-07 11:21:22

标签: objective-c

发布是否以递归方式释放所有内部对象?还是一定要手工完成?

我可以这样做吗?

NSMutableArray *list = [[NSArray alloc] init];
// ...
// fill list with elements
//...
[list release];

或者我必须在释放NSMutableArray之前逐个释放所有内部对象吗? //除了列表本身之外,没有任何其他对包含对象的引用。

2 个答案:

答案 0 :(得分:4)

是的。它在添加时会保留它们,并在dealloc'd时释放它们。这实际上是我在这里看到的最常见问题之一。

答案 1 :(得分:0)

如果您拥有该对象,则必须将其释放。

    NSMutableArray *list = [[NSArray alloc] init];

    NSString *str = [[NSString alloc] init] // you are the owner of this object
    [list addObject:str];
    [str release]; // release the object after using it
    [list release];

如果您不是该对象的所有者,则不应该发布。

    NSMutableArray *list = [[NSArray alloc] init];

    NSString *str = [NSString string]; // you are not owning this object
    [list addObject:str]; // str retain count is incremented
    [list release];  // str retain count is decremented.

这是偶数数组也使用的概念。将任何对象添加到数组时,数组将保留它。从某种意义上说,它成为该对象的所有者,并在释放数组时释放该对象。