ビューコントローラでは、サブビューの配列を作成します。サブビューの配列は、いつでも親ビューから削除できるので、その寿命はビューコントローラの寿命よりも短くなります。KVOオブザーバーを削除するには?
それらを作成するときに、私はかなりこの操作を行います。
- のAlloc /サブビューのinit
- はサブビューの
frame
財産のオブザーバーとしてビューコントローラを追加します。 - サブビューは、ビューコントローラへの参照を持たない
それを解放図
ユーザがサブビューを削除すると、そのサブビューが削除され、ビューのframe
キーパスがオブザーバに削除されていないというエラーがコンソールに表示されます。
観察されているサブビューがオブザーバーへの参照を保持していない場合、どのようにオブザーバーを削除できますか?
とにかくremoveAllObservers
のようなことはありませんか?
サブビュー内のオブザーバーへの参照を作成する必要はありません。これは、KVOのポイントをいくらか打ち負かすためです(私はデリゲートのセットアップを使用することもできます)。
保持された配列からUIViewを削除すると、オブザーバを削除できませんでしたか? –
サブビュー自体を観察するようにオブザーバーに指示し、ビューが閉じたときに観察を停止することができますか?私はこれが可能なのかどうかはわかりません。そうでない場合は、cwielandの答えを見てください。 – Daniel
しかし、サブビューの前にView Controllerが割り当て解除されたらどうなりますか?サブビューの割り当てを解除し、配列を解放してサブビューを削除することで、すでに削除されているオブザーバーを削除しても安全ですか? –