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), ^{
// ここに非同期でバックグラウンドに投げたい処理を書く
});

