KVOはたまに使うのでいつもメソッドを忘れてしまう。リファレンスや技術サイトを検索してもKVOについての技術側面の説明が多くメソッドを素早く思い出したいときのサイトがないので、そのメモ。
念のため、Xcodeのスニペットに登録できるように変数部分をテンプレート化している。
監視の登録と解除
登録
//KVOの登録
[<#監視対象#> addObserver:<#監視するオブザーバ#>
forKeyPath:<#監視対象のプロパティ名#>
options:<#監視するデータにどのような物を含めるか#>
context:<#任意のインスタンス#>];
解除
//KVOの解除
[<#監視対象#> removeObserver:<#監視するオブザーバ#>
orKeyPath:<#監視対象のプロパティ名#>];
登録、解除もまず監視対象有りきなので、メッセージは監視対象へと送るようにadd/removeすると憶えてコーディングを進めるとメッセージ呼び出しが自動補完される。
オブザーバのメソッド
監視するオブザーバには次のようなメソッドを実装する。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
//MEMO:場合によっては任意のcontextで先に条件を分ける
if( [keyPath isEqualToString:<#監視対象のプロパティ名#>] ){
//MEMO:changeのキーと値により判断。
}
}
監視した結果実行されるだけなのでメソッドに戻り値はなく、監視なのでobserveから始めると憶えとくとあとは楽。