当我收到内存警告时,我发布了一堆存储在NSMutableArray中的对象。
[_children release];
我还需要在某个时刻通过对象递归(可能是在发生了mem警告之后),所以我需要检查对象是否还在,我与nil进行比较 - 这是不行的因为释放数组不会有任何结果。
我无法循环遍历数组,逐个删除对象并设置为nil,因为我不允许在迭代期间修改数组。
感觉我错过了一些明显的东西。我只想在数组中释放+ nil一些值。
答案 0 :(得分: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!
如果我将“a”放入数组然后再从数组中删除它,则“a”的保留计数减1。要么它仍然大于零,在这种情况下“a”将不会被释放或它是零,在这种情况下它被释放。释放后将a的引用设置为nil对其他仍然指向“a”的变量没有影响。
因此,即使NSArray在将其移除到数组并释放它之后将对“a”的引用设置为nil(因为它的引用计数为零),它对仍然指向“a”的实例变量没有影响
我不确定你要做什么,这当然是可能的,但你在这里完全错了。
答案 1 :(得分:0)
假设您没有将数组元素保留在其他位置,当然通过从数组中删除对象,或释放数组本身,您也释放了元素。我认为这就是你需要做的事情。
来自Apple文档:
每个对象都会收到一条保留消息 在将其id添加到数组之前 它是一个发布消息 从数组中删除或何时删除 数组已取消分配