6

一定時間遅延させながら、同じランループ上の他のものが実行を継続できるようにする必要があります。私はこれを行うために次のコードを使用しています:

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];

これは、関数が目的の時間(1秒)を待たずにすぐに戻る場合があることを除いて、私が望んでいることを正確に実行しているようです。

誰かがこれを引き起こす可能性があるものを私に知らせてもらえますか?そして、実行ループの実行を許可しながら待機する適切な方法は何ですか?

注:sleep()と同様の方法で遅延させたいので、遅延後、以前と同じ実行ストリームに戻ります。

4

4 に答える 4

8

そのためには GCD を使用する必要がありますdispatch_after。それははるかに最近で効率的 (そしてスレッドセーフであり、すべて) であり、非常に使いやすいです。

Xcodeにはコードスニペットも埋め込まれているので、入力を開始するdispatch_afterとスニペットが提案され、検証すると準備された2〜3行がコードに書き込まれます:)

Xcodeによるコードスニペットの提案

int64_t delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    <#code to be executed on the main queue after delay#>
});
于 2012-10-12T19:51:40.887 に答える
1

NSTimerを使用して、特定の遅延後に何らかのメソッドの呼び出しを開始します。

于 2012-10-12T19:18:59.650 に答える
1

試しましたperformSelector:withObject:afterDelay:か?

アップルのドキュメントから

遅延の後、デフォルト モードを使用して、現在のスレッドでレシーバーのメソッドを呼び出します。

于 2012-10-12T21:04:40.447 に答える