1. ホーム
  2. iphone

[解決済み] iphoneのiosが別スレッドで動作する

2023-01-23 06:34:47

質問

別スレッドでコードを実行する最良の方法は何ですか?それは

[NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL];

または

    NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                        selector:@selector(doStuff:)
                                                                          object:nil;
[queue addOperation:operation];
[operation release];
[queue release];

私は2番目の方法をとっていますが、私が読んでいるWesley Cookbookは1番目の方法をとっています。

どのように解決するのですか?

私見ですが、一番良い方法は libdispatch、別名 Grand Central Dispatch (GCD) を使うことだと思います。iOS 4 以降に制限されますが、とにかくシンプルで使い勝手がよいです。バックグラウンドのスレッドで何らかの処理を行い、その結果に対してメインの実行ループで何かを行うというコードは、信じられないほど簡単でコンパクトです。

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // Add code here to do background processing
    //
    //
    dispatch_async( dispatch_get_main_queue(), ^{
        // Add code here to update the UI/send notifications based on the
        // results of the background processing
    });
});

まだの方は、WWDC 2010 の libdispatch/GCD/blocks に関するビデオをチェックしてみてください。