Как получить объект из других классов в appDelegate, когда приложение входит в фон

У меня есть класс, который запускает несколько таймеров, и когда приложение переходит в фоновый режим, я хочу остановить их. Я знаю, конечно, это делается в appDelegate, но когда я получил timer класс, инициализированный как переменная экземпляра в другом классе. Каковы общие способы получения объекта экземпляра в appDelegate?

Я делегирую didEnterBackground в класс с таймером я хочу остановиться?

Я делаю таймер сингелтон?

Использовать центр уведомлений?

или, надеюсь, есть лучшие способы, чем это!

2 ответа

Вероятно, самое простое, что можно сделать здесь, это опубликовать уведомление, когда ваш делегат приложения получитdidEnterBackground:"вызов. И ваш класс таймера (или класс, у которого есть куча таймеров) прослушивает это уведомление.

Вам понадобится соответствующий метод app-Delegate-Do-A-Post, если вы хотите перезапустить таймеры, когда приложение вернется в fireground.

Вы правы - вам нужен только один метод didEnterBackground Метод в вашем приложении Delegate.

Использование центра уведомлений может вызвать массу проблем (вы на 100% уверены, что каждый раз, когда приложение входит в фоновый режим, в вашем классе будут срабатывать таймеры?). Центр уведомлений в этом случае может легко вызвать сбой.

Вот что я сделаю:

  1. Установите мои таймеры в одном классе (давайте назовем это TimerManager)
  2. Сделайте мой класс уроком Singleton.
  3. В TimerManager Я создам массив / набор с таймерами.
  4. Вызвать одноэлементный класс сразу после загрузки моих первых ViewControllers (или в AppDelegate). В основном сразу после того, как мое приложение запустится.
  5. добавлять Timers в мой набор / массив, когда мне это нужно.
  6. Создать метод stopAllTimers

\

-(void)stopAllTimers {

  for(NSTimer *timer in self.allTimers) {
   [timer invalidate];
  }
}
  1. Назовите этот метод в моем didEnterBacground: [[TimerManager sharedInstance] stopAllTimers]

Вот и все, и это совершенно безопасно.

Другие вопросы по тегам