Cocoa API解説(macOS/iOS)

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。

目次

NSOperationクラス

INDEX>Foundation>

apple(OS X)
apple(iOS)

解説

並列処理を行う抽象クラスで実際にはNSInvocationOperationNSBlockOperationで実際のタスクを実行します。
UI操作に関する実行はメインスレッドで行う必要があります。

継承 NSObject
準拠 NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 Mac OS X v10.5以降
iOS 2.0以降
定義 NSOperation.h

概要

並列処理をするために実際にどのような処理を行うかを定義するクラスです。NSOperationQueueは処理を行うオブジェクト(NSOperationのサブクラスのインスタンス)の処理順などを管理するためのクラスです。

NSOperationは抽象クラスです。実際のオブジェクトはNSInvocationOperationNSBlockOperationなどのNSOperationのサブクラスが行います。

オペレーションオブジェクトはシングルショットです。シングルショットとは一度実行に使用した後もう一度再利用することはできないということです。

オペレーションオブジェクトの初期化

オペレーションオブジェクトを初期化するにはallocで作成した後(– init)メソッドを使用します。

オペレーションの実行

実行を開始するには(– start)メソッドを使います。startメソッドを呼び出すと、(– main)メソッドが呼ばれ、実行が開始されます。

終了時の処理をセットするには(– setCompletionBlock)メソッドを使用します。終了時の処理を取得するには(– completionBlock)メソッドを使用します。

オペレーションのキャンセル

– cancel

オペレーション状態の取得

現在のオペレーションの状態を取得します。
処理が終了したかを取得するには(– 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)メソッドを使用します。

適合するプロトコル

メソッド

初期化

– init

オペレーションのキャンセル

– cancel

オペレーションキューの実行優先度

– queuePriority
– setQueuePriority

実行優先度の管理

– threadPriority
– setThreadPriority

サブクラス化の注意