2011-05-24 92 views
1

如果我有一个辅助方法,这就是增加了对象在我的自定义类的数组(NSMutableArray的),会是有意义的做之一:如果一个方法接受对象并添加到一个数组中,它是否应该在必要时检测并释放对象?

  1. 莫名其妙地自动检测是否进入的对象已经被自动释放?那么如果在将其添加到数组后将其释放?
  2. 在dealloc中迭代数组中的所有对象,并以某种方式检查它们是否不需要被释放,然后在释放数组本身之后呢?

我所关心的是当我不得不释放我的自定义类,包括数组时,我怎么知道数组中的对象的状态?

+0

它不应该需要知道。事实上,你的班级并不重要。如果调用代码将对象标记为自动释放,则它不拥有自己的指针。如果它保留了对象,它拥有这些对象。你自己的帮手不需要知道这一点。 – BoltClock 2011-05-24 23:33:48

回答

4

它应该是代码调用你的帮助器方法释放对象(通过autorelease或正常版本)后,将它们传递给你的函数的责任。传递给你的对象将被保存下来供你使用,方法是将它们放入数组中。当你在dealloc中释放数组时,该数组中的所有对象都将被释放。合理?

I.e.你不需要做任何特别的事情 - 只需将对象添加到你的数组中。

+0

是的 - 所以只需在dealloc方法中发布[_myArray发布]就是我所要做的然后对吗? – Greg 2011-05-24 23:54:07

+0

这是正确的... – nielsbot 2011-05-25 06:50:38

2

在处理其他对象内存的方法(除访问器方法外)中,您不会执行任何操作。这是对象所有权的整体概念;因为你的方法不拥有你传入的对象,它不应该处理该对象的内存。 NSMutableArray将处理它在交易时包含的对象,除了在完成数组时释放数组之外,您无需执行任何其他工作。

3

最简单的规则 - 不时被提及 - 是你应该只释放已明确分配(alloc),复制(copy),新建(new)或保留的对象(保留)。在你描述的场景中,你对任何事情都不负责任。如果你的方法没有做上述四件事中的任何一件,那么没有什么可担心的。

+0

这是内存管理的最大规则101 – 2011-05-24 23:41:48

0

莫名其妙地自动检测传入的对象是否已经autoreleased?那么如果在将其添加到数组后将其释放?

没有 - 集保留他们添加的对象,然后当他们在dealloc的迭代去除

释放他们通过阵列中的所有对象,并以某种方式检查他们并不需要被释放,并那么在发布这个数组之后呢?

没有 - 集保留他们添加的对象,然后释放他们时,他们被删除

关注我的是,当我要的dealloc我的自定义类,包括阵列,我怎么知道数组中对象的状态?

集合将负责处理它,并在集合中保存对象的引用。 (当然)负责在阵列本身上调用release时,持有它的对象将删除或替换它(例如,在dealloc中)。

相关问题