【问题标题】:executeFetchRequest:error: returns autoreleased array or with retain count = 1executeFetchRequest:错误:返回自动释放的数组或保留计数 = 1
【发布时间】:2011-06-22 20:13:20
【问题描述】:

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

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

再次编辑

捂脸

在自动释放池...释放它之前,我正在检查保留计数。 感谢您提供有关不致电 retainCount 的提示 - 我以后会避免使用它。这是一个很好的例子,它让我误入歧途。

【问题讨论】:

    标签: iphone objective-c ios core-data


    【解决方案1】:

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

    The actual value of retainCount is irrelevant.

    【讨论】:

      【解决方案2】:

      它返回一个对象,除非您保留它,否则该对象将在未来某个时间消失。是否自动发布是一个实现细节。除此之外,您无法判断某些内容是否被自动释放。

      还有:

      不要调用retainCount

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

      【讨论】:

        猜你喜欢
        • 2011-08-29
        • 1970-01-01
        • 2011-07-06
        • 2012-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        相关资源
        最近更新 更多