使用NSArray对象引用,我是否显式释放数组中的所有对象或仅释放数组本身?

时间:2009-05-20 01:59:03

标签: iphone objective-c memory-management

我的班级有一个充满了物体的NSArray。在我的dealloc方法中,我可以简单地在我的NSArray上调用release,还是我需要迭代数组并首先释放所有对象?

3 个答案:

答案 0 :(得分:55)

您可以直接在NSArray上致电发布。 NSArray的实现将负责将release发送到存储在数组中的所有对象。

答案 1 :(得分:10)

NSArray会在添加对象时保留对象,并在删除对象或释放阵列时释放它们。记住这一点,正是这种“所有权”的概念保留/释放内存管理。拥有数组的对象也是如此,如果它还保留了数组中的对象,则需要在dealloc实现中向它们发送另一个释放消息。如果没有,并且如果没有其他对象保留它们,则一旦数组释放它们,它们将被释放。

答案 2 :(得分:1)

你应该能够释放NSArray,它将释放它的所有对象,无论你是否持有其他引用。如果您有一个也存在于NSArray中的实例对象,则必须显式释放该对象 - 只是释放NSArray可能不会释放数组上下文之外的对象。