Strange bug in NSMutableArray removeObject
我有以下代码段:
1 2 3 4 5 6 7 8 9 | 1: if ((s >= kEnumValue1) && (s <= kEnumValue2)) { 2: MyObject * o = [self findObjectFor:s]; 3: if ([o isValidFor:self]) { 4: [arrayOfMyObjects removeObject:o]; 5: for (MyObject * mo in arrayOfMyObjects) { 6: ... 7: } 8: } 9: } |
出于某些非常奇怪的原因,当我的代码到达第4行时,如果我跨步了,它将回到同一线程上方法的开始,而无需经过第5行。有人知道为什么会发生这种情况吗?
NSMutableArray上的removeObject没有提及任何异常。
可以安全地假设您没有在
您检查了
好吧,在我项目的所有类中进行了大量调试之后,我发现,当调用MyObject的release时,它会在另一个类上调用" release"(因为它是最后一个引用,因此会调用" dealloc"),再次为第三类,然后,它调用NSMutableDictionary中的removeObjectForKey:nil。这将引发一个根本未记录的NSInvalidArgumentException。太邪恶了...