从NSArray中删除对象

时间:2012-10-29 16:41:32

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

我有一个ARC项目。

我内部有NSArray个内容。 在某些时候,我需要更改数组中的对象。

怀疑NSMutableArray我会这样做:

[array removeAllObjects];

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

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

或者我需要使用NSMutableArray

3 个答案:

答案 0 :(得分:11)

你可以这样做:

array = newArray;

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:1)

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