監視と通知は、それぞれのオブジェクトのスレッドで行われるらしい。
NSOperationQueue と NSNotificationCenter と NSObjectの performSelectorOnMainThread:withObject:waitUntilDone: の組み合わせが良さそう。
KVO しているプロパティがバックグラウンドスレッドで変更されたら、オブザーバのメソッドも同じバックグラウンドスレッドで呼び出されます。
「UIKit とスレッドのお約束 - Elegant Apps Developers」
2010-10-26 追記:それと、KVO じゃなくて NSOperation の話になるけれども以下のことを付け足しておく。
メインスレッドから [queue cancelAllOperations] などとして、別スレッドでバックグラウンド実行中処理の [myOperation cancel] が発動されると、[myOperation cancel] はメインスレッドで実行される。そんでそのバックグラウンド実行中のものは別スレッドでそのまま動いているから、どっちがどっちって感じになってしまうと。
キャンセル>即処理終了、ってことではないから、isCancelled とか使ってキャンセルされるときのことも考えて書いていこうね。ってことで。
0 件のコメント:
コメントを投稿