14

我有一个 ARC 项目。

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

NSMutableArray会做的:

[array removeAllObjects];

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

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

还是我需要使用NSMutableArray

4

3 回答 3

13

你可以这样做:

array = newArray;

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

于 2012-10-29T16:55:32.670 回答
4

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

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

您不必array = nil在将其设置为新数组之前进行设置。

于 2012-10-29T16:46:37.647 回答
1

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

于 2012-10-29T16:43:02.200 回答