所以我有一个 CCLayer 对象,它有一个子 CCSprite 对象,当一个条件发生时(通过更新方法检测到),一个 CCSprite 的方法被调用,它本身调用下面的方法
[[NSNotificationCenter defaultCenter] postNotificationName:@"mymethod" object:nil];
然后 CCLayer 继续运行
[node removeFromParentAndCleanup:YES];
为 CCSprite 删除它。 CCLayer 还在 init 上调用了以下内容
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mymethod) name:@"mymethod" object:nil];
现在 10 次中有 9 次这很好并且按预期工作但是偶尔我会收到指向通知帖子行的 bad_access。
我从阅读其他人有类似问题的文章中猜测这是因为子对象已被删除,但我不知道该怎么做,因为它在它之前被调用已删除。
是不是发生了什么事延迟了后通知的调用,它最终在对象被移除后被调用,或者我找错了树?
更新
在上面添加了删除代码,如果我注释掉删除和清理行,它就不会发生。
最佳答案
您需要删除观察者。观察者不会自动删除,因此如果您不删除它们,那么您会将它们堆叠在内存中,这可能是它稍后中断的原因。
关于ios - Obj-c NSNotificationCenter 错误访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20103247/