0

次のコードを使用して、ココア タッチで別のスレッドを作成できることを知っています。

       [NSThread detachNewThreadSelector:@selector(getEarthquakeData) toTarget:self withObject:nil];

プライマリ スレッドのプロセスに戻るにはどうすればよいですか? 次のコードを使用して、デリゲートからこれを実行できることを知っています。

    [(id)[[UIApplication sharedApplication] delegate] performSelectorOnMainThread:@selector(addToEarthquakeList:) withObject:self.currentEarthquakeObject waitUntilDone:YES];

上記のように、メイン スレッドがデリゲートではなくコントローラーで実行されている場合、どのようにすればよいでしょうか。

ありがとう!

4

2 に答える 2

0

あなたはただすることはできません:

[controller performSelectorOnMainThread:@selector(addToEarthquakeList:) withObject:self.currentEarthquakeObject waitUntilDone:YES];

...または私はあなたの質問を誤解しましたか?(メインスレッドでコントローラーメソッドを実行する方法を尋ねていると思いました。)

于 2009-04-16T19:21:24.780 に答える
0

あなたは正しい電話をしています。リクエストを呼び出すとperformSelectorOnMainThread:...、メインスレッドの実行ループでキューに入れられます。そのため、その時点でメインスレッドが別の場所で実行されている場合、その処理が最初に終了します。メイン スレッド コードが実行ループに戻ると、バックグラウンド スレッドからの要求を確認して呼び出すことができます。

実行ループが処理するためにキューに入れられた他のイベントがある場合、何が優先度を決定するのかわかりませんが、一般的には、次に実行されるものであってもそれに依存できるとは思いません。これは、メイン スレッドのシーケンシャル処理を最小限に抑えるように努める必要があるもう 1 つの理由です (つまり、メイン スレッドで長時間実行されるシーケンスを持たないようにしてください。しかし、それが最初にバックグラウンド スレッドを使用している理由かもしれません)。

于 2009-04-16T19:02:02.347 に答える