2009-10-02 32 views
2

我有一个小计划,它是一个倒计时的计时器,直到午夜,我想知道如果我应该保持原样,计算每秒直到午夜的时间(在每1秒调用一次的NSTimer方法内):iPhone开发 - NSTimer准确性的时间,而不是重新计算?

NSDate *now = [[NSDate alloc] init]; 
NSDateComponents *dateComponents = [[self gregorian] components: 
        (NSHourCalendarUnit | 
        NSMinuteCalendarUnit | 
        NSSecondCalendarUnit) fromDate:now]; 
[now release]; 
NSUInteger hour = 23 - [dateComponents hour]; 
NSUInteger min = 59 - [dateComponents minute]; 
NSUInteger sec = 59 - [dateComponents second]; 

NSString *time = [[NSString alloc] initWithFormat:@"%02d:%02d:%02d", 
        hour, min, sec]; 
[[self lblCountDown] setText: 
[time stringByReplacingOccurrencesOfString:@"1" withString:@" 1"]]; 
[time release]; 

或者我应该才算是第一次,然后每个其他时间只需一秒每次减去自同步到每个电话1秒?我并不担心这会花费超过1秒钟,但如果结果是相同的,那么没有理由不优化..所以无论如何,我应该这样做吗?为什么?

谢谢。

回答

2

声明“没有理由不优化”是一个危险的说法。你需要一个理由进行优化,而不是缺乏一个不会的理由!该代码是一个相当合理的小剪辑,不需要太多时间来执行。

至于准确性,保持准确时间的唯一合理方法就是让系统为你做,获得“现在”时间是一种方法。把它掌握在自己手中可能会导致时钟漂移到错误,也许足以注意到,也许不会。

至于优化,请查看它的速度有多快,如果它太糟糕了,修复它,如果没有,请继续前进到更有趣的地方!

+0

我把双方都做好了,如果它们是相同的,并且它已经有一段时间了,总是如此。 – mk12 2009-10-02 02:33:32

+0

似乎合理。你可能会看到微控制器或其他东西的漂移,但不是像这样的快速设备。 – 2009-10-02 21:56:02

2

不成熟的优化永远是不好的,今天不要写代码,你不能在一年后调试。从未做过任何优化,直到你:

  1. 有一个工作的应用程序。
  2. 工作应用程序的性能很差。
  3. 你已经完成了检测仪器以找到实际的颈带。
  4. 你确定你正在使用最好的算法。
  5. 找出如何在不牺牲代码清晰度的情况下进行优化。

随着这一切的说明和完成,每秒检查一次当前时间永远不会退化您的表现。所以显然你甚至没有通过要求2来应用优化。