释放NSArray时将对象设置为nil

Sam*_*Sam 1 iphone null release objective-c nsmutablearray

当我收到内存警告时,我发布了一堆存储在NSMutableArray中的对象.

[_children release];
Run Code Online (Sandbox Code Playgroud)

我还需要在某些时候通过对象进行递归(可能在发生mem警告之后),所以我需要检查对象是否仍然存在,我与nil进行比较 - 这是不可行的,因为释放了数组不会有任何结果.

我无法循环遍历数组,逐个删除对象并设置为nil,因为我不允许在迭代期间修改数组.

感觉我错过了一些明显的东西.我只想在数组中释放+ nil一些值.

Mec*_*cki 5

对不起,但你所做的对我来说似乎毫无意义.您不能将对象设置为nil,您只能将对象的引用设置为nil,但这会对其他引用产生影响.

NSObject * a = [[NSObject alloc] init];
NSObject * b = a;

[a release];
a = nil;

// b is NOT nil! b still points to the memory location where
// a used to be, which is now not valid anymore and using b
// for anything may crash your application!
Run Code Online (Sandbox Code Playgroud)

如果我将"a"放入数组然后再从数组中删除它,则"a"的保留计数减1.要么它仍然大于零,在这种情况下"a"将不会被释放或它是零,在这种情况下它被释放.释放后将a的引用设置为nil对其他仍然指向"a"的变量没有影响.

因此,即使NSArray在将其移除到数组并释放它之后将对"a"的引用设置为nil(因为它的引用计数为零),它也不会影响仍然指向"a"的实例变量.

我不确定你要做什么,这当然是可能的,但你在这里完全错误的轨道.