Добавление и удаление NSNotificationCenter Observer — UIApplicationDidEnterBackgroundNotification — правильный путь?

У меня есть UIView, который воспроизводит звук, имеет NSTimer и круговую анимацию прогресса.

Для простоты, если пользователь переключает приложения или отвечает на звонок, я бы хотел, чтобы все процессы останавливались и сбрасывались.

Я предлагаю использовать:

  1. Вызов наблюдателя - возможно, в viewWillAppear:

     override func viewWillAppear(animated: Bool) {
    
    // set observer for WillEnterForeground
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(WorkoutFullFace1Exercise7TVC.willEnterBackground), name: UIApplicationDidEnterBackgroundNotification, object: nil)
    
    
    ...}
    

а также

  1. Остановить соответствующие задачи:

    // Stop all audio, timer and animation if app enters background.
    func willEnterBackground() {
    
    myAudioPlayer.stop()
    myAudioPlayer.currentTime = 0
    
    swiftTimer.invalidate()
    swiftCounter = 60
    timerLabel.text = String(swiftCounter)
    
    
    pauseBtn.alpha = 1.0
    
    playBtn.alpha = 1.0
    
    stopBtn.alpha = 1.0
    
    currentCount = 0
    circularProgressView.animateFromAngle(circularProgressView.angle, toAngle: 0, duration: 0.5, completion: nil)
    }
    
  2. Уволить наблюдателя:

    override func viewWillDisappear(animated: Bool) {
    
      NSNotificationCenter.defaultCenter().removeObserver(self, name: UIApplicationDidEnterBackgroundNotification, object: nil)
    
    .... }
    

Где правильно загружать и увольнять наблюдателя? Я читал темы, в которых говорится об использовании viewDidLoad/ deinit, viewWillAppear / Disappear и т. д.

Может ли кто-нибудь пролить свет на то, что рекомендуется для моего сценария, а также на то, что является текущим и, вероятно, останется «пригодным для использования» в будущем (язык и практика, похоже, быстро меняются в мире программирования).

И я использую правильный синтаксис выше?

Спасибо!


person Katherine Jenkins    schedule 30.04.2016    source источник


Ответы (1)


мне кажется все правильно

Просто не забудьте вызвать супер реализацию в каждом методе. Это может привести к некоторым проблемам, когда вы позже создадите подклассы.

 override func viewWillAppear(animated: Bool) {
      super.viewWillAppear(animated);
      // other code
...}

 // same for viewWillDisappear
person Shubhank    schedule 30.04.2016
comment
Потрясающий! Хороших выходных, сэр! - person Katherine Jenkins; 30.04.2016