【问题标题】:Memory Leak with NSMutableArrayNSMutableArray 的内存泄漏
【发布时间】:2011-09-08 20:33:15
【问题描述】:

我正在尝试设置多维NSMutableArray。我最初将所有位置设置为[NSNumber numberWithInt:0],然后将对象替换为另一个[NSNumber numberWithInt:4](例如)。完成后,我想重建阵列。我说[array release] 是对的吗?这会释放所有NSNumber 对象吗?还是我需要做更高级的内存管理,比如先将所有对象设置为 nil?

【问题讨论】:

    标签: cocoa nsmutablearray


    【解决方案1】:

    您可以释放数组并重新创建它,或者更有效地调用数组的-removeAllObjects。您填充它的 NSNumber 对象是自动释放的,因此该数组通过在您将它们添加到其中时获得它们的所有权,也承担在其自身被释放或删除其内容时释放它们的责任。

    【讨论】:

      【解决方案2】:

      当您添加/替换和删除对象以及释放包含项目的数组时,您的数组将正确保留和释放您的NSNumbers。所以是的,您是正确的,因为您使用的是 NSNumbers 便利构造函数,它将返回一个自动释放的对象。

      【讨论】:

        【解决方案3】:

        从哲学上讲,您不应该知道或关心NSArray 在保留和释放方面做了什么。您与它的合同范围是addObject:/etc 会将一个对象放入数组中,objectAtIndex:/etc 随后将返回相同的对象。最多你需要考虑是否需要在放入数组后继续拥有一个对象,完全根据你自己的要求。 NSArray 完全负责自己的内存管理。

        NSArray 的情况下,它如何在内部管理保留和释放是众所周知的,Noah 和 Joe 已经回答了您的字面问题。但是你永远不应该依赖另一个具有特定实现的对象。

        【讨论】:

        • 明确记录了 NSArray 将保留和释放其元素。 developer.apple.com/library/mac/documentation/Cocoa/Conceptual/… 这是其合同的一部分,其中一个好处是您可以使用数组来拥有动态数量的对象,而无需自己保留和释放每个对象,也无需依赖任何未指定的实现细节。 (所有这些都适用于字典 [键被复制,对象被保留] 和集合。)
        猜你喜欢
        • 2012-07-29
        • 2011-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-27
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多