このようなオブザーバーを保存する場合:
let observer: NSKeyValueObservation = foo.observe(\.value, options: [.new]) { (foo, change) in
print(change.newValue)
}
不要になったらobserver
を削除/無効化/クリーンアップするにはどうすればよいですか?
foo
インスタンスには、remove
インスタンスを受け取るNSKeyValueObservation
のようなメソッドはありません。observer
インスタンス自体にもremove
のようなメソッドはありません。
IOS 11では、その必要はありません。オブザーバーをスコープから外してください。オブザーバーを観察対象の前に死なせたり、観察対象をオブザーバーの前に死なせたりすることに対するペナルティはもうないので、あなたは実際に仕事をする必要はありません。
一方、本当にwantを使用してオブザーバーの登録を解除する場合は、オブザーバーを保持しているものから削除するか、invalidate
に通知します。 (オブザーバーを永続化しないと、死ぬになり、オブザーバー関数が呼び出されないため、何かがそれを保持している必要があります。)
(「このようにオブザーバーを保存する場合」と言いますが、let
を使用して保存する方法は、オブザーバーを保存するためのやや愚かな方法です。後で削除するか、少なくともvar
に設定できるオプションのnil
に保存します。)