0

このエラーで問題が発生しました:

「クラス Actor のインスタンス 0x156ad8d0 の割り当てが解除されましたが、キー値オブザーバーがまだ登録されていました。観測情報が漏洩し、他のオブジェクトに誤ってアタッチされることさえありました。NSKVODeallocateBreak にブレークポイントを設定して、デバッガーでここで停止します。これが現在の観測情報:"

受信者が監視しているすべてのオブジェクトを登録解除し、それを監視しているすべてのオブジェクトを登録解除する効率的な方法はありますか? 登録を解除する唯一の方法は、removeObserverForKeyPath を使用することです。登録されているすべてのオブジェクトとキーパスを追跡する必要があり、面倒になる可能性があります。

4

1 に答える 1

1

removeObserverForKeyPath:@Kevinが提案したように使用してください。

ただし、割り当てを解除する前にオブザーバーを削除する必要があります。割り当て解除中、インスタンスの状態は一貫性がなくなります。特にクラス階層を扱う場合。したがって、解放中にオブザーバーをアクティブにすることは、多くの場合、非常に不安定で修正が難しいバグの原因となります。

于 2013-10-05T17:45:42.700 に答える