我是否需要在NSMutableArray中发布对象?

时间:2011-05-01 17:45:34

标签: iphone objective-c memory-management nsmutablearray

  

可能重复:
  Cocoa Memory Management NSArray with Objects

我有一个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。 可能是“内存管理编程指南”中的任何地方(希望如此)。

2 个答案:

答案 0 :(得分:5)

容器将保留其包含的对象,并在销毁容器或从中删除对象时释放它们。您应该在将对象添加到容器后释放它们(因为它们由容器保留,因此您不再需要保留它们)。

答案 1 :(得分:3)

仅发布您拥有的内容,无论是通过alloc,new,retain还是copy。

你做完

之后的测试
id test = [NSObject new];

所以你负责释放它,无论你是否将其添加到数组中。

如果你这样做

id test = [[NSObject new] autorelease]; // or any autoreleased convenience methods

你已经放弃了测试的所有权,所以你不应该发布它,即使你把它放在一个数组或其他形式的集合中。该系列将取得所有权。

您只需要发布您拥有的东西。