我想实现一个每秒计数的计时器。我有两种方法,但有点困惑哪一种是最佳方法。它使用 NSTimer 或 NSDate,据我了解,NSTimer 通常只用于触发方法,所以也许我不应该使用 NSTimer 而使用 NSDate?
一些澄清将不胜感激,谢谢。
我想实现一个每秒计数的计时器。我有两种方法,但有点困惑哪一种是最佳方法。它使用 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,它以秒为单位显示经过的时间。