毎秒カウントアップするタイマーを実装したい。2つの方法を考えていますが、どちらが最適な方法なのか、ちょっと混乱しています。NSTimerまたはNSDateのいずれかを使用しています.NSTimerは通常、メソッドを起動するためにのみ使用されることを理解しているため、NSTimerではなくNSDateを使用する必要がありますか?
いくつかの明確化をいただければ幸いです、ありがとう。
毎秒カウントアップするタイマーを実装したい。2つの方法を考えていますが、どちらが最適な方法なのか、ちょっと混乱しています。NSTimerまたはNSDateのいずれかを使用しています.NSTimerは通常、メソッドを起動するためにのみ使用されることを理解しているため、NSTimerではなくNSDateを使用する必要がありますか?
いくつかの明確化をいただければ幸いです、ありがとう。
NSDate
モデルクラスです。特定の日時を表す以外は、起動したり、何もしません。ストップウォッチには(NSTimer
と)の両方を使用する必要があります。NSDate
時計を起動するときは、現在の日付をNSDate
インスタンスに保存し、1秒間隔(ミリ秒を表示する場合はそれ以上)でNSTimerを起動します。そして、タイマーが作動するたびに、現在の日付と保存された日付の差を計算して、ユーザーに表示します。
NSTimerを使用して、UIを定期的に更新します。NSDateを使用して、各更新の正確な時刻を取得します。
おそらくNSTimerが必要です。一定時間待機してから、指定したオブジェクトにイベントを発生させます。NSDateは、不変である単一の時点を提供するだけです。ドキュメントを確認してください。ありがとう!
「カウントアップ」とはどういう意味ですか?「カウントアップ」したときに何をしたいですか?
基本的に、NSDateを使用して「開始日」を保存できます。そうすれば、いつでも「現在」とその保存日を区別できます。
一方、画面に時を刻む時計が必要な場合は、毎秒起動するNSTimerを使用して、アプリケーションに時計を更新するように指示します。
誰も見ずに毎秒増加する整数変数のユースケースはほとんどありません。
私はNSTimerを使用します。でタイマーを開始できます
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateSeconds)userInfo:nil repeats:YES];
そしてあなたのupdateSeconds
方法で:
(void)updateSeconds
{
int seconds = [self.secondsLabel.text intValue];
seconds = seconds + 1;
self.secondsLabel.text = [NSString stringWithFormat:@"%d",seconds];
}
secondsLabel
経過時間を秒単位で表示するラベルに接続された IBOutletであることに注意してください。