Sam*_*Sam 1 iphone null release objective-c nsmutablearray
当我收到内存警告时,我发布了一堆存储在NSMutableArray中的对象.
[_children release];
Run Code Online (Sandbox Code Playgroud)
我还需要在某些时候通过对象进行递归(可能在发生mem警告之后),所以我需要检查对象是否仍然存在,我与nil进行比较 - 这是不可行的,因为释放了数组不会有任何结果.
我无法循环遍历数组,逐个删除对象并设置为nil,因为我不允许在迭代期间修改数组.
感觉我错过了一些明显的东西.我只想在数组中释放+ nil一些值.
对不起,但你所做的对我来说似乎毫无意义.您不能将对象设置为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"的实例变量.
我不确定你要做什么,这当然是可能的,但你在这里完全错误的轨道.
| 归档时间: |
|
| 查看次数: |
1885 次 |
| 最近记录: |