-->

2014年4月30日水曜日

【マルチスレッド】Objective Cのマルチスレッド実装方法

ObjCのマルチスレッドについてちょっと詳しくなったからメモ

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の継承クラスを作らなくてもいい
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 件のコメント:

コメントを投稿