【问题标题】:Will -replaceObjectAtIndex:withObject: of NSMutableArray release the old object that's replaced by a new one?NSMutableArray 的 -replaceObjectAtIndex:withObject: 会释放被新对象替换的旧对象吗?
【发布时间】:2009-05-25 10:27:44
【问题描述】:

文档没有说明这一点。当一个旧对象被“移除”并且一个新对象进入它的位置时,那么旧对象会发生什么?我必须自己释放吗?

【问题讨论】:

    标签: iphone cocoa-touch memory-management uikit nsmutablearray


    【解决方案1】:

    不,你不必自己释放它。

    如果替换对象的保留计数等于 0,您可能会收到错误。

    新对象被保留。旧对象被释放。

    【讨论】:

    • 如果 retainCount > 1(当其他一些对象仍在保留它时),您可能不会立即收到该错误。
    • @rein - 你是对的。我将答案编辑为更正确的框架。
    【解决方案2】:

    您不必释放它。

    您没有对其执行 alloccopyretain,因此不对内存负责 - 使用此文档很清楚。

    我不希望 Apple 记录 SDK 中每个方法的内存管理过程,除非它违反了他们已经设置的内存管理规则。如果文档没有说明,您可以假设默认规则适用。

    【讨论】:

      【解决方案3】:

      该文档在文件顶部非常清楚地说明了这一点:

      与 NSArray 一样,NSMutableArray 的实例保持对其内容的强引用。如果不使用垃圾回收,当您将对象添加到数组时,该对象会收到一条保留消息。当一个对象从一个可变数组中移除时,它会收到一条释放消息。如果没有对该对象的进一步引用,这意味着该对象已被释放。如果您的程序保留对此类对象的引用,则该引用将变为无效,除非您在对象从数组中删除之前向该对象发送保留消息。

      没有必要为每种方法重复记录这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-17
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 1970-01-01
        • 2011-08-16
        相关资源
        最近更新 更多