【问题标题】:Remove objects from NSArray从 NSArray 中删除对象
【发布时间】:2012-10-19 00:32:33
【问题描述】:

我有一个 ARC 项目。

我有一个NSArray 里面有一些东西。 在某些时候,我需要更改数组中的对象。

NSMutableArray 我会做的:

[array removeAllObjects];

我确信这个方法会释放数组中包含的所有对象。 但是使用 NSArray 我不能那样做!所以,我的问题是:如果我将数组设置为nil 然后重新初始化它,数组中包含的旧对象真的从内存中释放了吗?

array = nil;
array = [[NSArray alloc] initWithArray:newArray];

或者我需要使用NSMutableArray

【问题讨论】:

  • '但是使用 NSArray 我不能这样做!'那么,如果您需要的话,为什么不使用NSMutableArray
  • 因为数组是不可变的(没有添加或删除对象)。只改变整个数组!

标签: ios nsmutablearray nsarray automatic-ref-counting release


【解决方案1】:

你可以这样做:

array = newArray;

这将导致array 被释放。当这个NSArray 被释放时,所有包含的对象也将被释放。

【讨论】:

    【解决方案2】:

    当不再有强引用时,旧数组将被释放。如果您有唯一的强引用,那么当您将array 设置为其他值时,它将立即被释放。

    当旧数组被释放时,它会释放它包含的所有对象。如果这些对象没有其他强引用,它们也会立即被释放。

    在将array = nil 设置为新数组之前,您不必设置它。

    【讨论】:

      【解决方案3】:

      我建议使用 NSMutableArray,因为不会再有分配和释放的开销

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-26
        • 1970-01-01
        相关资源
        最近更新 更多