16

私は ARC ベースのプロジェクトに取り組んでいます。私は非 ARC ベースのプロジェクトに取り組んだことがありません。

私のARC対応プロジェクトでゾンビに遭遇しました.私が理解している限り、メモリはありません

オブジェクトの割り当てが自動的に解除されるため、 ARC でリークしますが、ゾンビに遭遇しました

「割り当て解除されたインスタンスに渡されたメッセージ」と言っています。私の混乱は、メモリリークに相当するものです

ゾンビに。その場合、ARCでもメモリリークが発生しますか?助けはありますか?

4

2 に答える 2

42

Objective-C の用語での「ゾンビ」は、リークの反対です。リークは、割り当てられたメモリの一部であり、参照がなくなったため、解放できません。ゾンビは割り当てが解除されたオブジェクトです、それへの参照はまだ存在し、メッセージはまだ送信されています (あらゆる種類の予測不可能な動作につながる可能性があります)。

于 2012-10-01T04:53:34.400 に答える
1

いくつかの可能性があり、コードを見ずに何が起こっているのかを知ることは困難です。「メッセージが割り当て解除されたインスタンスに渡されました」というエラーは、オブジェクトが存在していた場所を指すポインターがあるが、その後割り当てが解除されたことを意味します。これは、ARC で発生する可能性があり、現在も発生しています。これは、ARC コードと対話する非 ARC コード (またはおそらく Core Foundation のもの) があり、ハンドオフでうまくいかないために発生する可能性があります。また、ARC はオブジェクトを解放する正しい時点をほぼ毎回選択しますが、完全ではないために発生することもあります (通常、これらのインスタンスを回避する方法があります)。

于 2012-10-01T04:54:04.760 に答える