如果一个方法接受对象并添加到一个数组,它应该检测&必要时释放对象?

时间:2011-05-24 23:32:11

标签: iphone objective-c ios memory-management nsmutablearray

如果我有一个辅助方法,它将对象添加到我的自定义类中的数组(NSMutableArray),那么它是否有意义:

  1. 以某种方式自动检测传入的对象是否已经自动释放?那么如果在将它添加到数组后不释放它?
  2. 在dealloc中迭代遍历数组中的所有对象并以某种方式检查它们是否需要被释放,然后在此版本之后释放数组本身?
  3. 我担心的是当我必须解除我的自定义类(包括数组)时,如何知道数组中对象的状态?

4 个答案:

答案 0 :(得分:4)

调用你的帮助方法的代码应该负责在将对象传递给你的函数后释放它们(通过自动释放或正常释放)。传递给您的对象将通过将它们放入您的数组中来保留供您使用。在dealloc中释放数组时,将释放该数组中的所有对象。有意义吗?

即。你不需要做任何特殊的事情 - 只需将对象添加到你的数组中。

答案 1 :(得分:3)

最简单的规则 - 有时会不时提到 - 是你应该只发布你明确分配(alloc),复制(复制),newed up(new)或保留的对象(保留)。在您描述的场景中,您不对任何事情负责。如果你的方法没有做上述四件事中的任何一件,那就没什么可担心的了。

答案 2 :(得分:2)

您不会在方法(访问器方法除外)中执行任何操作来处理其他对象内存。这是对象所有权的整体思想;因为你的方法不拥有你传入的对象,所以它不应该处理那个对象的内存。 NSMutableArray将在解除分配时处理它包含的对象,除了在完成数组后释放数组之外,您不必执行任何其他工作。

答案 3 :(得分:0)

  

以某种方式自动检测传入的对象是否已经自动释放?然后如果在将它添加到数组后不释放它?

否 - 集合保留它们添加的对象,然后在删除它们时释放它们

  

在dealloc中迭代遍历数组中的所有对象并以某种方式检查它们是否需要释放,然后在此版本之后发布数组本身?

否 - 集合保留它们添加的对象,然后在删除它们时释放它们

  

我担心的是当我必须解除我的自定义类(包括数组)时,如何知道数组中对象的状态?

该集合将处理它,并在该对象处于集合中时保持对该对象的引用。当(当然)负责在数组本身上调用release时,保留它的对象会删除或替换它(例如在dealloc中)。