1. GCDを使う
前にも書いたけど、スレッドはGCDを使うのが楽
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{ [self doSomething]; //別スレッド dispatch_sync(dispatch_get_main_queue(), ^{ [self doSomething]; // メインスレッド }); });
この場合、別スレッドに重い処理を書いて、メインスレッドはUIの描画が一般的らしい
PRIORITYで優先度も設定できる
そして、インスタンスメソッドはスレッドを指定して実行することができる
[self performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:NO];
2. NSOperationを使うNSOperationQueue *queue = [NSOperationQueue new]; MyOperation *operation = [MyOperation new];//NSOperationを継承したクラスを作成 [queue addOperation:operation];
3. NSInvocationOperationを使う
この場合、NSOperationの継承クラスを作らなくてもいい
この場合、NSOperationの継承クラスを作らなくてもいい
NSInvocationOperation *invOperation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(aaa) object:nil]; [queue addOperation:invOperation];
4. とりあえずバックグラウンドに投げる
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ // ここに非同期でバックグラウンドに投げたい処理を書く });
0 件のコメント:
コメントを投稿