问题 从NSArray中删除对象


我有一个ARC项目。

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

惠特 NSMutableArray 我会去做的 :

[array removeAllObjects];

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

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

或者我需要使用 NSMutableArray ?


8928
2017-10-29 16:41


起源

“但是对于NSArray,我做不到!”那你为什么不用 NSMutableArray 如果那就是你需要的? - jv42
因为数组是不可变的(没有添加或删除对象)。只改变整个阵列! - Fry


答案:


你可以这样做:

array = newArray;

这将导致 array 即将面世。当这个 NSArray 取消分配后,所有包含的对象也将被释放。


11
2017-10-29 16:55





当没有更强的引用时,旧数组将被释放。如果你有唯一的强引用,那么当你设置 array 对别的东西,它将立即解除分配。

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

你不必设置 array = nil 在将其设置为新阵列之前。


4
2017-10-29 16:46





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


1
2017-10-29 16:43