如果我有一个辅助方法,这就是增加了对象在我的自定义类的数组(NSMutableArray的),会是有意义的做之一:如果一个方法接受对象并添加到一个数组中,它是否应该在必要时检测并释放对象?
- 莫名其妙地自动检测是否进入的对象已经被自动释放?那么如果在将其添加到数组后将其释放?
- 在dealloc中迭代数组中的所有对象,并以某种方式检查它们是否不需要被释放,然后在释放数组本身之后呢?
我所关心的是当我不得不释放我的自定义类,包括数组时,我怎么知道数组中的对象的状态?
如果我有一个辅助方法,这就是增加了对象在我的自定义类的数组(NSMutableArray的),会是有意义的做之一:如果一个方法接受对象并添加到一个数组中,它是否应该在必要时检测并释放对象?
我所关心的是当我不得不释放我的自定义类,包括数组时,我怎么知道数组中的对象的状态?
在处理其他对象内存的方法(除访问器方法外)中,您不会执行任何操作。这是对象所有权的整体概念;因为你的方法不拥有你传入的对象,它不应该处理该对象的内存。 NSMutableArray将处理它在交易时包含的对象,除了在完成数组时释放数组之外,您无需执行任何其他工作。
最简单的规则 - 不时被提及 - 是你应该只释放已明确分配(alloc),复制(copy),新建(new)或保留的对象(保留)。在你描述的场景中,你对任何事情都不负责任。如果你的方法没有做上述四件事中的任何一件,那么没有什么可担心的。
这是内存管理的最大规则101 – 2011-05-24 23:41:48
莫名其妙地自动检测传入的对象是否已经autoreleased?那么如果在将其添加到数组后将其释放?
没有 - 集保留他们添加的对象,然后当他们在dealloc的迭代去除
释放他们通过阵列中的所有对象,并以某种方式检查他们并不需要被释放,并那么在发布这个数组之后呢?
没有 - 集保留他们添加的对象,然后释放他们时,他们被删除
关注我的是,当我要的dealloc我的自定义类,包括阵列,我怎么知道数组中对象的状态?
集合将负责处理它,并在集合中保存对象的引用。 (当然)负责在阵列本身上调用release
时,持有它的对象将删除或替换它(例如,在dealloc
中)。
它不应该需要知道。事实上,你的班级并不重要。如果调用代码将对象标记为自动释放,则它不拥有自己的指针。如果它保留了对象,它拥有这些对象。你自己的帮手不需要知道这一点。 – BoltClock 2011-05-24 23:33:48