2010-10-27 59 views
2

我的问题很简单(我认为)。我有一个类实现了一个简单的天文台(使用一些整数和NSTimer)。我想关闭我的应用程序(所以进入背景模式),但我希望我的计时器仍然继续计数。我该如何管理?applicationDidEnterBackground整数迭代

非常感谢!

回答

1

保存启动计时器时出现的时间。类似于self.timerStartDate = [NSDate date];。每秒调用一次NSTimer并增加一个整数会给你非常不准确的结果。
NSTimer Class Reference

计时器不是实时的机构;只有在添加了定时器的运行循环模式之一运行并且能够检查定时器的触发时间是否已过时,它才会触发。由于典型的运行循环管理各种输入源,所以定时器的时间间隔的有效分辨率被限制在50-100毫秒的量级上。如果在长时间标注期间发生定时器的触发时间,或者运行循环处于未监视定时器的模式下,定时器将在下次运行循环检查定时器时才触发。因此,计时器触发的实际时间可能是计划的点火时间之后的相当长的一段时间。

如果您使用与保存开始时间的计时器甚至办法“运行”如果程序没有运行


编辑: 肯定。使用计时器来计算时间是错误的。
我刚写了一个小测试用例。具有12行简单表格视图的应用程序。两个定时器,一个毫秒发射一个,另一个每10秒发射一次。
在第一个定时器中,我给Integer加1,在第二个定时器中打印第一个定时器的结果和从上次打印以来的时间,用mach_absolute_time()测量。
看看这些差异,第一次测量结果相当不错,但是如果我开始在简单的UITableView中滚动,该UITableView在我的强大的Mac上运行在模拟器中,那么您将得到很大的改变。

2010-10-27 11:16:49.266 MutliTableTest[24726:207] Calculated: 9.988000000000 
2010-10-27 11:16:49.267 MutliTableTest[24726:207] Measured : 10.000055888000 
2010-10-27 11:16:59.266 MutliTableTest[24726:207] Calculated: 9.986000000000 
2010-10-27 11:16:59.267 MutliTableTest[24726:207] Measured : 9.999898500000 
2010-10-27 11:17:09.608 MutliTableTest[24726:207] Calculated: 8.091000000000 
2010-10-27 11:17:09.609 MutliTableTest[24726:207] Measured : 10.341779530000 
2010-10-27 11:17:19.266 MutliTableTest[24726:207] Calculated: 1.966000000000 
2010-10-27 11:17:19.267 MutliTableTest[24726:207] Measured : 9.658319274000 
2010-10-27 11:17:29.266 MutliTableTest[24726:207] Calculated: 9.991000000000 
2010-10-27 11:17:29.267 MutliTableTest[24726:207] Measured : 9.999891531000 

所以不使用的NSTimer,使用NSDate的,并得到我想知道当前的时间和喜欢的东西NSTimeInterval ti = [[NSDate date] timeIntervalSinceDate:self.startDate];

的开始时间,但之间的区别,为什么你需要一个differenct的timeStamp每毫秒

+0

所以对你来说,使用整数增量(毫秒,秒,分钟等)不是一个好主意。因此,最好使用开始日期,然后每毫秒(使用NSTimer)获取当前日期并进行减法。是对的吗 ? – Pierre 2010-10-27 09:04:43

+0

这是一个天文钟,所以我想要与我的数字手表相同的系统。我做了NSTimeInterval ti = [[NSDate date] timeIntervalSinceDate:self.startDate]但是我怎样才能每毫秒刷新它没有定时器? – Pierre 2010-10-27 10:14:21

+0

每一毫秒是一秒1000次,即每秒1000帧。我怀疑这是可能的,但你可以使用一个计时器,这是定时器的用途。只要不用定时器做任何实时的事情。而30秒重画一次应该绰绰有余。 – 2010-10-27 10:40:59