NSOperationでマルチスレッド処理
NSOperationでマルチスレッド処理を構築する場合、
NSOperationのサブクラスを作成しその中のmainで処理を実装することになる。
作成したoperationをNSOperationQueueにaddOperationして実行する。
もう少し簡単に実装する場合NSBlockOperationやNSInvocationOperationが使える。
名前の通りNSBlockOperationは処理の内容をblockで記述しoperationとして登録する。
NSInvocationOperationは@selectorで処理対象メソッドを指定しoperationに登録する。
#import <Foundation/Foundation.h> @interface InvocationTest : NSObject -(void)test; @end @implementation InvocationTest -(void)test { sleep(1); NSLog(@"invocation\n"); } @end int main(int argc, const char * argv[]) { @autoreleasepool { NSLog(@"start\n"); NSOperationQueue *queue = [[NSOperationQueue alloc]init]; NSOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{ [NSThread sleepForTimeInterval:2.0]; NSLog(@"block\n"); }]; [queue addOperation:op1]; // blockオペレーション追加 InvocationTest *test = [[InvocationTest alloc]init]; NSOperation *op2 = [[NSInvocationOperation alloc]initWithTarget:test selector:@selector(test) object:nil]; [queue addOperation:op2]; // invocationオペレーション追加 NSLog(@"end\n"); [queue waitUntilAllOperationsAreFinished]; } return 0; }