Operation
Operation は、達成すべきタスク を抽象化したクラス。抽象クラスなので、継承した具象クラスを作成するか、既存の NSInvocationOperation や BlockOperation クラスを利用する。
開発者が実行するタスクのロジックの実装に集中できるよう、ベースの実装にはタスクを安全に実行するためのロジックがすでに含まれている。
Operation の実行は 1度きり であり、使い回されることはない。実行したい場合は大抵、Operation Queue に積んで実行する。Operation Queue は Operation が積まれた場合にはそれを別スレッド、あるいは Grand Central Dispatch で指定されたキューで実行する。
start() メソッドを呼び出して直接実行することもできるが、準備前の Operation を実行すると例外が発行されてしまうため、事前に isReady でチェックしておく必要がある。
依存
addDependency, removeDependency で依存を追加削除できる
全ての依存が終了して初めて実行準備が完了した状態になる
NSOperation でサポートされる依存では、キャンセルや異常終了も通常終了と同一とみなされる
エラーをトラックしたければ追加の実装が必要
https://developer.apple.com/documentation/foundation/operation
KVO, KVC
Operation は KVC, KVO 可能なクラスである。サブクラスを実装する場合、同様に KVC, KVO 可能であるように実装しなくてはならない。新しくプロパティを追加した場合でも、それらも同様に KVO, KVC 可能であるように実装することが推奨されている。KVO を利用する場合、各 Operation は大抵メインスレッド以外で実行されるため、UI コンポーネントと直接繋いではならない。