2

我有一个小项目,它是一个倒计时到午夜的计时器,我想知道是否应该保持原样,每秒计算直到午夜的时间(在每 1 秒调用一次的 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 秒的时间,但如果结果与其他方式相同,则没有理由不进行优化.. 所以无论如何,我应该这样做吗?为什么?

谢谢。

4

2 回答 2

2

“没有理由不优化”的说法是危险的。你需要一个优化的理由,而不是缺少一个不优化的理由!该代码是一个相当合理的小片段,不会花费太多时间来执行。

至于准确性,保持准确时间的唯一合理方法是让系统为您完成,获取“现在”时间是一种方法。将其掌握在自己手中可能会导致时钟漂移到错误中,也许足以引起注意,也许不会。

至于优化,分析它,看看它有多快,如果它很糟糕,修复它,如果没有,继续做更有趣的事情!

于 2009-10-02T02:25:46.687 回答
2

过早的优化总是不好的,不要今天写一年后无法调试的代码。永远不要做任何优化,直到你:

  1. 有一个工作应用程序。
  2. 正在运行的应用程序具有实际的不良性能。
  3. 您已经完成了检测以找到实际的 bootle-neck。
  4. 你确定你使用的是最好的算法。
  5. 弄清楚如何在不牺牲代码清晰度的情况下进行优化。

综上所述,每秒检查一次当前时间永远不会降低您的性能。所以很明显,你甚至没有通过应用优化的要求 2。

于 2009-10-02T08:13:41.447 回答