释放对象时,是否会递归释放所有内部对象?还是必须手动完成?
我只需要这样做吗?
NSMutableArray *list = [[NSArray alloc] init];
// ...
// fill list with elements
//...
[list release];
在释放NSMutableArray之前,我是否必须逐个释放所有内部对象?//假设除了列表本身之外,没有任何对包含对象的其他引用。
释放对象时,是否会递归释放所有内部对象?还是必须手动完成?
我只需要这样做吗?
NSMutableArray *list = [[NSArray alloc] init];
// ...
// fill list with elements
//...
[list release];
在释放NSMutableArray之前,我是否必须逐个释放所有内部对象?//假设除了列表本身之外,没有任何对包含对象的其他引用。
是的,它确实会保留这些值并在释放时释放它们。这实际上是我在这里看到的最常见的问题之一。
如果您拥有该对象,则必须释放它。
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.
这是一个概念,即数组也使用。当您将任何对象添加到数组中时,数组将保留它。从某种意义上说,它成为该对象的所有者,并且当您释放数组时,它将释放该对象。