わかりました、私は 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で示される行でスローされています>>。わかりました、これは (常に?) dealloced されたオブジェクトにアクセスしていることを意味します。私が得られないのは、この行でエラーが発生している理由です。node私が得ているものが編集されたものである場合dealloc、次の行でエラーが発生すると予想されます(たとえば、にアクセスしたときnode.body)。オブジェクト自体がどのように問題を引き起こしているのかわかりません。NSEnumeratorそれは直前に作成されたものであり、それがセットであった場合は の前self.containedの行で死んでいるはずですよね?
では、nextObject取得したオブジェクト (つまり ) に対して実際にメソッドを呼び出すnodeと、例外がスローされるのでしょうか? それはおそらくそれを説明するでしょうが、私はこれが当てはまるとは思わなかったでしょう. または、ゾンビである可能性が高いオブジェクトを誰か教えてもらえますか?
これは非常に断続的に発生します。開発の最後の 1 週間程度で 2 回発生したため、ゾンビ インストゥルメントを実行してもトラップされる可能性は低いでしょう。