Objective-C でマルチスレッドプログラミング
マルチスレッド処理のやり方がいくつかあるが、それぞれ試してみた。 GCDが最近の書き方らしいけど、まだまだgithubに上がっているライブラリをみると NSOperationを使っていたりするので、ひと通りやってみました。
// part1 シンプルなパターン [self performSelectorInBackground:@selector(hoge) withObject:nil]; [self performSelectorInBackground:@selector(fuga) withObject:nil]; // part2 NSOperationをつかう NSOperationQueue *queue = [NSOperationQueue new]; MyOperation *operation = [MyOperation new]; [queue addOperation:operation]; // part3 NSOperationの継承クラスを作らなくても良い NSInvocationOperation *invOperation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(aaa) object:nil]; [queue addOperation:invOperation]; // part4 GCD dispatch_queue_t main = dispatch_get_main_queue(); dispatch_queue_t sub = dispatch_queue_create("example.com", NULL); dispatch_async(sub, ^{ //何か重たい処理 for (int i=0; i<10000; i++) NSLog(@"%d", i); dispatch_async(main, ^{ //重たい処理が終わったとき NSLog(@"%@", @"finish"); }); });
MyOperationクラスはこんな感じ
// MyOperation.h #import <Foundation/Foundation.h> @interface MyOperation : NSOperation @end // MyOperation.m #import "MyOperation.h" @implementation MyOperation // method名は startか mainである必要がある -(void)start{ for (int i=0; i<10000000; i++) NSLog(@"%@", @"def" ); } @end