0

我想实现一个每秒计数的计时器。我有两种方法,但有点困惑哪一种是最佳方法。它使用 NSTimer 或 NSDate,据我了解,NSTimer 通常只用于触发方法,所以也许我不应该使用 NSTimer 而使用 NSDate?

一些澄清将不胜感激,谢谢。

4

5 回答 5

3

NSDate是一个模型类。除了代表某个日期和时间之外,它不会触发或执行任何操作。您必须同时使用 (NSTimerNSDate) 作为秒表。当您启动手表时,将当前日期保存在一个NSDate实例中,并以 1 秒的间隔启动一个 NSTimer(如果您想显示毫秒,则可以更长)。每次计时器触发时,您都会计算当前日期和保存日期之间的差异并将其显示给用户。

于 2012-07-07T13:18:09.633 回答
1

使用 NSTimer 定期更新你的 UI。使用 NSDate 获取每次更新的准确时间。

于 2012-07-07T13:18:00.377 回答
0

您可能需要 NSTimer。它将等待一段时间,然后向指定对象触发事件。NSDate 只是给你一个不可变的时间点。请检查文档。谢谢!

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nstimer_Class/Reference/NSTimer.html

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsdate_Class/Reference/Reference.html

于 2012-07-07T13:18:07.653 回答
0

“数数”是什么意思?当它“计数”时你想做什么?

基本上,您总是可以使用 NSDate 来存储“开始日期”,然后只要您愿意,就可以得到“现在”和存储日期之间的差异。

另一方面,如果您想在屏幕上显示时钟,您可以使用每秒触发一次的 NSTimer 来告诉您的应用程序更新时钟。

对于某个地方的某个整数变量几乎没有用例,它每秒都在增加而没有人看到它。

于 2012-07-07T13:18:36.723 回答
0

我会使用 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,它以秒为单位显示经过的时间。

于 2012-07-07T13:22:56.160 回答