发布是否以递归方式释放所有内部对象?还是一定要手工完成?
我可以这样做吗?
NSMutableArray *list = [[NSArray alloc] init];
// ...
// fill list with elements
//...
[list release];
或者我必须在释放NSMutableArray之前逐个释放所有内部对象吗? //除了列表本身之外,没有任何其他对包含对象的引用。
答案 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.
这是偶数数组也使用的概念。将任何对象添加到数组时,数组将保留它。从某种意义上说,它成为该对象的所有者,并在释放数组时释放该对象。