2010-12-26 13 views
0

私はいくつかのタイマーを開始するIBActionを持っています。1秒間実行を一時停止する

私は一定の時間、2番目または一時停止したいと思います。実行を一時停止するにはどうすればよいですか?

私は[self performSelector:@selector(someMEthod:) withObject:someObject afterDelay:1.0];

の知っているが、どのように私は何を呼び出さずに遅延が発生する可能性がありますか?

ありがとうございます。

答えて

4

sleep()または+[NSThread sleepForTimeInterval:]に電話することはできますが、メインスレッドでは行わないでください。メインスレッドの実行を一時停止すると、その時間にアプリのUIがブロックされ、クラッシュしたかのようにユーザーに表示されます。メインスレッドを数秒以上ブロックした場合、Appleのウォッチドッグタイマーはあなたのアプリを即座に終了させるでしょう。

は、この問題の詳細についてジェフラマルシュことで、このブログ記事を参照してください:http://iphonedevelopment.blogspot.com/2010/05/psa-respect-main-thread.html

+0

クール。うん、タイマーを起動するIBActionにsleep()を入れます。 sleep()は引数を取るか?またはどこで寝る時間を設定するのですか?私は、ボタンが押されたときに始まるいくつかのIBActionsを持っています。これらのアクションはそれぞれタイマーを開始し、私はタイマー間のギャップが始まります。このようにすると、メインの実行がブロックされません。 – jarryd

+0

あなたはそれをどう思いますか?メインスレッドでボタンのタップアクションが呼び出されます。ただしないでください。 –

+0

私は正しく説明しませんでした。同じUIButtonにいくつかのIBActionsをリンクします。各IBActionはタイマーを開始する別の関数を呼び出します。現時点では、これらのタイマーはすぐに開始されますが、どうすればそれらの間に小さな遅延を置くことができますか?遅延を伴って以下を使用することはできますか? countdownTimer2 = [NSTimer scheduledTimerWithTimeInterval:0.10ターゲット:セルフセレクタ:@ selector(handleTimer)userInfo:nil repeats:YES]; ? – jarryd

0

sleep(int_No_of_Sec);を使用できます。 //例えば。睡眠(1);

1

あなたは何を呼び出さずに遅延が発生する必要はありません。 UIには悪いことですが、Cocoa Touchのイベント駆動型パラダイムには適合しません。

(少なくとも)2つの部分/半分に一時停止したいルーチンをカットします。最初の半分には後半の遅延コールを設定し(遅延、タイマー、キューなどでセレクタを実行してから)、メインループに戻ります。 OSは、潜在的に有益なものを実行した後に、後で第2の部分を呼び出す(ユーザに応答性のあるUIを提供したり、バッテリ寿命を節約し、バックグラウンド電子メールなどを追い越すなど)。

部分(ループ変数など)間の状態を保存するために、新しいプログラマの中には学習に間に合わないものがあります。

関連する問題