Как мне управлять своим NSTimer в приложении iPhone на вкладке? - PullRequest
3 голосов
/ 19 августа 2010

У меня есть приложение на основе вкладок с тремя вкладками, одна из которых работает часы.Чтобы оживить интерфейс часов, я использую NSTimer, который срабатывает раз в секунду.Если пользователь будет переключаться между различными вкладками, как мне управлять этим таймером?

  1. Могу ли я просто использовать scheduledTimerWithTimeInterval, чтобы создать и запланировать таймер при первом запуске приложения и позволить ему умереть при закрытии приложения?Или я должен поддерживать переменную экземпляра для таймера в контроллере rootview для вкладки часов и использовать addTimer:forMode: и invalidate?
  2. Если по лестнице, как часто мне следует добавлять и аннулировать таймер?В моих viewWillAppear и viewWillDisappear методах для контроллера rootview вкладки clock?Где-то еще?

Большое спасибо за вашу мудрость!

Ответы [ 2 ]

2 голосов
/ 19 августа 2010

То, что сказал @samsam, плюс это: таймер, установленный на 1 секунду, НЕ гарантированно срабатывает точно на секунду.Это будет запланировано на следующее доступное время обработки, как только пройдет секунда.Во многих случаях это будет чертовски близко к точному времени, на которое он запланирован, но редко это будет именно тогда, и это может быть совсем немного, если приложение занято другими вещами.

Если действительно важно, чтобы ваши часы на самом деле тикали раз в секунду (и если бы это было не так, это было бы не очень много времени), вы хотите, чтобы ваш таймер срабатывал чаще, чем это, и обновляли интерфейс, когда он заметил, чтозначение времени, которое он смотрит, изменилось.

1 голос
/ 19 августа 2010

Я бы сделал следующее:

, если появится ваш Просмотр часов -> установите Часы на текущее время, затем запустите таймер, который обновляет часы каждую секунду:

clockRefreshTimer = [NSTimer scheduledTimerWithTimeInterval: 1 target: self selector:@selector(updateClockView) userInfo:nil repeats:YES]

если представление часов вот-вот исчезнет, ​​аннулируйте таймер

[clockRefreshTimer invalidate];

Таким образом, вы не будете делать ненужные обновления.

надеюсь, я смогу помочь,
sam

...