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

Ric*_*ich 44 iphone memory-management objective-c

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

Mar*_*c W 55

你可以直接打电话给释放NSArray.执行NSArray将负责发送release到存储在数组中的所有对象.

  • 这不是不正确的.但它也并不意味着你需要遍历数组并自己释放所有对象.如果您执行Heng-Cheong所说的并在将对象添加到阵列后立即释放该对象,则不会遇到此问题.您只需要注意,将一个对象添加到集合会使保留计数增加1,并释放该集合(或从该集合中删除该对象,假设它是一个可变集合)会使保留计数减少1. (4认同)

Mar*_*eau 10

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