好吧,我已经从事编码工作 12 年了,但我对 Obj-C 的经验相对缺乏——尤其是内存管理——而且我遇到了一个令我惊讶的错误。
这是代码块:
// self.contained is an NSMutableSet
NSEnumerator *e = [self.contained objectEnumerator];
>> while (CCNode *node = [e nextObject]) {
if (!node.body || ![self validate:node]) {
[self.contained removeObject:node];
}
}
我_NSZombie_NSException
在>>
. 好的,我知道这意味着(总是?)我正在访问一个已dealloc
编辑的对象。我不明白为什么这条线上会发生错误。如果node
我得到的是已dealloc
编辑的内容,我希望下一行出现错误(例如,当我访问时node.body
)。我看不出NSEnumerator
对象本身是如何导致问题的,因为它是在之前创建的,如果它是self.contained
集合,它应该在之前就死了,对吧?
那么,nextObject
实际上是否在检索到的对象(即)上调用了一些node
会导致抛出异常的方法?这也许可以解释它,但我没想到会是这样。或者谁能告诉我哪个物体可能是僵尸?
这种情况非常间歇性地发生,我在开发的最后一周左右遇到过两次,因此运行僵尸仪器不太可能捕获它。