1

アプリを書いているときに、予期していなかった奇妙な動作に遭遇し、それを次のように要約しました。

主な機能が以下のアプリを作りました。Activity Monitorで監視している間、1つのスレッドを使用します。

int main(int argc, const char * argv[])
{
    @autoreleasepool
    {
        while (YES)
        {
            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
                                     beforeDate:[NSDate distantFuture]];
        }
    }

    return 0;
}

に変更[NSDate distantFuture]する[NSDate dateWithTimeIntervalSinceNow:1.0]と、アプリは最大3つのスレッドを使用します。これを少し調べたところdispatch_queue、私に代わって暗黙的にaが作成され、スレッドプールが作成されたようです。

ただ好奇心が強い:なぜこれが起こるのですか?[NSDate dateWithTimeIntervalSinceNow:1.0]実行ループで?を作成するのはどうdispatch_queueですか?

4

1 に答える 1

2

ほとんどの場合、実装の詳細であり、心配する必要はありません....

可能な実装の 1 つdistantFutureは「永久に実行する」ことです。したがって、特定の日付を持つタイマーのようなタイマーは必要ありません。「タイマー」が実際にdispatch_after()である可能性があることを考えると、それがキューを説明している可能性があります。

か否か。興味深い質問ですが、アプリとは完全に無関係である可能性があります。

于 2012-05-09T22:31:43.320 に答える