我有一个ARC项目。
我内部有NSArray
个内容。
在某些时候,我需要更改数组中的对象。
怀疑NSMutableArray
我会这样做:
[array removeAllObjects];
我确信此方法会释放数组中包含的所有对象。
但是对于NSArray我不能那样做!所以,我的问题是:如果我将数组设置为nil
然后重新初始化它,那么数组中包含的旧对象是否真的从内存中释放出来?
array = nil;
array = [[NSArray alloc] initWithArray:newArray];
或者我需要使用NSMutableArray
?
答案 0 :(得分:11)
你可以这样做:
array = newArray;
这将导致array
被释放。当这个NSArray
被释放时,所有包含的对象也将被释放。
答案 1 :(得分:4)
当没有更强的引用时,旧数组将被释放。如果您有唯一的强引用,那么当您将array
设置为其他内容时,它将立即被释放。
当旧数组被释放时,它将释放它包含的所有对象。如果没有对这些对象的其他强引用,它们也将立即被释放。
在将array = nil
设置为新阵列之前,您不必设置它。
答案 2 :(得分:1)
我建议使用NSMutableArray,因为不会再有分配和重新分配的开销