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