NSOperationクラス
解説
並列処理を行う抽象クラスで実際にはNSInvocationOperation、NSBlockOperationで実際のタスクを実行します。
UI操作に関する実行はメインスレッドで行う必要があります。
継承 | NSObject |
準拠 | NSObject (NSObject) |
フレームワーク | /System/Library/Frameworks/Foundation.framework |
使用可能 | Mac OS X v10.5以降 |
iOS 2.0以降 | |
定義 | NSOperation.h |
概要
並列処理をするために実際にどのような処理を行うかを定義するクラスです。NSOperationQueueは処理を行うオブジェクト(NSOperationのサブクラスのインスタンス)の処理順などを管理するためのクラスです。
NSOperationは抽象クラスです。実際のオブジェクトはNSInvocationOperation、NSBlockOperationなどのNSOperationのサブクラスが行います。
オペレーションオブジェクトはシングルショットです。シングルショットとは一度実行に使用した後もう一度再利用することはできないということです。
オペレーションオブジェクトの初期化
オペレーションオブジェクトを初期化するにはallocで作成した後(– init)メソッドを使用します。
オペレーションの実行
実行を開始するには(– start)メソッドを使います。startメソッドを呼び出すと、(– main)メソッドが呼ばれ、実行が開始されます。
終了時の処理をセットするには(– setCompletionBlock)メソッドを使用します。終了時の処理を取得するには(– completionBlock)メソッドを使用します。
オペレーションのキャンセル
オペレーション状態の取得
現在のオペレーションの状態を取得します。
処理が終了したかを取得するには(– isFinished)メソッドを使用します。並列(非同期)で処理するかどうかを取得するには(– isConcurrent)メソッドを使用します。処理が実行中かを取得するには(– isExecuting)メソッドを使用します。
オペレーションはキャンセルされたかどうかを取得するには(– isCancelled)メソッドを使用します。オペレーションは準備中(startを待っている状態)かどうかを取得するには(– isReady)メソッドを使用します。
依存性の管理
依存性(別のオペレーションが終わるまで実行しない)を追加するには(– addDependency)メソッドを使用します。除去するには(– removeDependency)メソッドを使用します。
依存性があるかどうかを調べるには(– dependencies)メソッドを使用します。
#pragma mark MyOperation addDependency: //依存性 - (IBAction)method004:(id)sender { gQueue = [[NSOperationQueue alloc] init]; MyOperation *aOperation1 = [[MyOperation alloc] init]; MyOperation *aOperation2 = [[MyOperation alloc] init]; [aOperation1 setThreadPriority:0.1]; [aOperation2 setThreadPriority:0.9]; aOperation1.string = @"op 1"; aOperation2.string = @"op 2"; [gQueue addOperation:aOperation1]; [gQueue addOperation:aOperation2]; //aOperation1はaOperation2の処理が終わるまで実行しない。 [aOperation1 addDependency:aOperation2]; //[aOperation1 removeDependency:aOperation2]; NSLog(@"dependencies %@",([aOperation1 dependencies])?@"YES":@"NO"); NSLog(@"threadPriority %f",[aOperation1 threadPriority]); NSLog(@"threadPriority %f",[aOperation2 threadPriority]); }
オペレーションキューの優先度のセット
オペレーションキューの優先度をセットするには(– setQueuePriority)メソッドを使用します。オペレーションの優先度を取得するには(– queuePriority)メソッドを使用します。
優先度(下に行くほど優先される)
NSOperationQueuePriorityVeryLow
NSOperationQueuePriorityLow
NSOperationQueuePriorityNormal
NSOperationQueuePriorityHigh
NSOperationQueuePriorityVeryHigh
実行の優先度のセット
オペレーションの優先度をセットするには(– setThreadPriority)メソッドを使用します。取得するには(– threadPriority)メソッドを使用します。
処理が完了するまで同じスレッドの実行をブロック
処理が完了するまで同じスレッドの実行をブロックするには(– waitUntilFinished)メソッドを使用します。
適合するプロトコル
メソッド
初期化
オペレーションの実行
オペレーションのキャンセル
オペレーション状態の取得
– isCancelled
– isExecuting
– isFinished
– isConcurrent
– isReady
オペレーションキューの実行優先度
実行優先度の管理
サブクラス化の注意