【发布时间】:2010-10-27 12:23:07
【问题描述】:
我的班级有一个充满对象的 NSArray。在我的 dealloc 方法中,我可以简单地在我的 NSArray 上调用 release,还是需要先迭代数组并释放所有对象?
【问题讨论】:
标签: iphone objective-c memory-management
我的班级有一个充满对象的 NSArray。在我的 dealloc 方法中,我可以简单地在我的 NSArray 上调用 release,还是需要先迭代数组并释放所有对象?
【问题讨论】:
标签: iphone objective-c memory-management
您可以直接在NSArray 上致电发布。 NSArray 的实现将负责将release 发送到存储在数组中的所有对象。
【讨论】:
NSArray 在添加对象时保留对象,并在删除对象或释放数组时释放它们。请记住这一点,保留/释放内存管理正是基于这种“所有权”概念。拥有数组的对象也是如此,如果它还保留了数组中的对象,您将需要在您的 dealloc 实现中向它们发送另一个释放消息。如果没有,并且没有其他对象保留它们,那么一旦数组释放它们,它们就会被释放。
【讨论】:
你应该能够只释放 NSArray,它会释放它的所有对象,不管你是否持有对它们的其他引用。如果您有一个也存在于 NSArray 中的实例对象,则必须显式释放该对象 - 仅释放 NSArray 可能不会解除数组上下文之外的对象。
【讨论】: