executeFetchRequest:error:返回自动释放的数组或使用retain count = 1

时间:2011-06-22 20:13:20

标签: iphone objective-c ios core-data

NSManagedObjectContext方法的executeFetchRequest:error:文档中,它表示它返回一个数组,但它没有提到数组是自动释放还是保留count = 1。

我假设它是自动释放的,因为它似乎是一种方便的方法,但不确定。

再次编辑

捂脸

我在自动释放池释放之前检查了保留计数。 感谢不打电话retainCount的提示 - 我将来会避免它。这是一个很好的例子,它让我误入歧途。

2 个答案:

答案 0 :(得分:3)

根据Object Ownership Policy,只有前缀为“alloc”,“new”,“copy”和“mutableCopy”的方法才会返回您拥有的对象。 executeFetchRequest:error:也不例外。因此,您拥有所返回的数组,并且如果您需要保留它,则必须通过向其发送retain消息来声明对其的所有权。否则,它将被释放(在将来的某个时候)。

The actual value of retainCount is irrelevant.

答案 1 :(得分:2)

它返回一个将来某个时候会消失的对象,除非你保留它。是否自动释放是一个实现细节。除此之外,您无法判断某些内容是否已自动释放。

此外:

不要调用retainCount

没用;对象的绝对保留计数是一个实现细节,可以是任何数量的值,无明显原因