0

簡単な質問: これを行うとどうなりますか:

- (void)viewDidLoad
{
    [self performSelectorInBackground:@selector(myBGMethod) withObject:nil];
}

-(void)myBGMethod
{
    [self myOtherMethod];
}

-(void)myOtherMethod
{
    NSLog(@"This is not Inception");
    //some more code here
}

NSLog()およびその他のコードはmyOtherMethod、メイン スレッドまたはバックグラウンドで実行されますか?

4

3 に答える 3

1

バックグラウンドで実行されます。別のスレッドでmyBGMethodを呼び出すと、特に別のスレッドを要求しない限り、呼び出すものはすべて同じスレッドで行われます。

ちなみに、サポートするiOSのバージョンによっては、 GrandCentralDispatchについて詳しく知ることができます。マルチスレッドが非常に簡単になります。

于 2012-09-19T11:37:49.040 に答える
1

バックグラウンドスレッドで実行されます。

NSLogこれは、すべてのメソッド内で呼び出すことで確認できます。デフォルトでNSLogは、プロセスID(pid)に沿ってスレッド番号を出力します。

于 2012-09-19T11:38:08.377 に答える
1

コードの特定の行がどのスレッドで実行されているか知りたい場合は、その行にブレークポイントを置き、Xcode の [デバッグ ナビゲーター] ペインを確認できます。

ここに画像の説明を入力

この場合、ブレークポイントを設定しますNSLog(...)

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSLog(@"HI!");
});

スレッド 2 にいることがわかりますcom.apple.root.default-priority

于 2012-09-19T11:44:33.623 に答える