iPhone dev - точность NSTimer для времени вместо пересчета? - PullRequest
2 голосов
/ 02 октября 2009

У меня есть небольшой проект, который представляет собой таймер, который отсчитывает время до полуночи, и мне было интересно, если я должен оставить все как есть, вычисляя время до полуночи каждую секунду (внутри метода NSTimer, который вызывается каждую 1 секунду) :

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 ]

2 голосов
/ 02 октября 2009

Преждевременная оптимизация всегда ПЛОХАЯ , не пишите код сегодня, который вы не можете отладить год спустя. Никогда не занимайтесь оптимизацией, пока не наберете:

  1. Есть рабочее приложение.
  2. Рабочее приложение имеет действительно плохую производительность.
  3. Вы сделали контрольно-измерительные приборы, чтобы найти настоящую горловину.
  4. Вы уверены, что используете лучший алгоритм.
  5. Разобрался, как оптимизировать, не жертвуя ясностью кода.

Учитывая все сказанное и сделанное, проверка текущего времени раз в секунду не может ухудшить вашу производительность. Очевидно, что вы даже не выполнили требование 2 для применения оптимизаций.

2 голосов
/ 02 октября 2009

Утверждение «нет причин не оптимизировать» опасно. Вам нужна причина для оптимизации, а не отсутствие причины не делать этого! Этот код является довольно разумным небольшим фрагментом кода, выполнение которого не займет много времени.

Что касается точности, единственный разумный способ сохранить точное время - это позволить системе сделать это за вас, а время "сейчас" - это способ сделать это. Если вы возьмете это в свои руки, это может привести к ошибкам часов, может быть, достаточно, чтобы заметить, а может и нет.

Что касается оптимизации, профилируйте ее, посмотрите, насколько она быстра, если она отстой, исправьте, если нет, перейдите к чему-то более веселому!

...