我有一个NSMutableArray填充了一些对象。
例如:
...
id test = [NSObject new];
NSMutableArray *myArray = [NSMutableArray new];
[myArray addObject: test];
...
当多个对象需要对该数组的引用时,我不能只使用方法“ - removeAllObjects”。 所以我只在我自己的类的“ - dealloc”方法中使用数组的发布。
- (void)dealloc {
[myArray release];
[super dealloc];
}
我的对象名称“test”泄露了,因此我需要做更多的事情吗?
我在文档中找不到答案,对于NSMutableArray的“dealloc”或“release”方法没有意义。在NSObject参考中,他们没有描述NSMutableArray。 可能是“内存管理编程指南”中的任何地方(希望如此)。
答案 0 :(得分:5)
容器将保留其包含的对象,并在销毁容器或从中删除对象时释放它们。您应该在将对象添加到容器后释放它们(因为它们由容器保留,因此您不再需要保留它们)。
答案 1 :(得分:3)
仅发布您拥有的内容,无论是通过alloc,new,retain还是copy。
你做完
之后的测试id test = [NSObject new];
所以你负责释放它,无论你是否将其添加到数组中。
如果你这样做
id test = [[NSObject new] autorelease]; // or any autoreleased convenience methods
你已经放弃了测试的所有权,所以你不应该发布它,即使你把它放在一个数组或其他形式的集合中。该系列将取得所有权。
您只需要发布您拥有的东西。