添加和删除 NSNotificationCenter 观察者 - UIApplicationDidEnterBackgroundNotification - 正确的方法?
Adding & Removing NSNotificationCenter Observer - UIApplicationDidEnterBackgroundNotification - The Correct Way?
我有一个播放音频的 UIView,有一个 NSTimer 和进度条动画。
为简单起见,如果用户切换应用程序或接听电话,我希望所有进程都停止并自行重置。
我建议使用:
呼叫观察者 - 可能在 viewWillAppear
:
override func viewWillAppear(animated: Bool) {
// set observer for WillEnterForeground
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(WorkoutFullFace1Exercise7TVC.willEnterBackground), name: UIApplicationDidEnterBackgroundNotification, object: nil)
...}
和
停止相关任务:
// 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)
}
关闭观察者:
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIApplicationDidEnterBackgroundNotification, object: nil)
.... }
加载和解散观察者的正确位置在哪里?我已经阅读了声明使用 viewDidLoad
/deinit
、viewWillAppear / Disappear
等的线程。
任何人都可以阐明为我的场景推荐的内容,以及当前和将来可能保留的内容 'usable'(编程世界中的语言和实践似乎变化很快)。
我使用的语法是否正确?
谢谢!
我觉得一切都是正确的
Just make sure to call super implementation in each method. That can
lead to some issues when you are subclassing things later
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated);
// other code
...}
// same for viewWillDisappear
我有一个播放音频的 UIView,有一个 NSTimer 和进度条动画。
为简单起见,如果用户切换应用程序或接听电话,我希望所有进程都停止并自行重置。
我建议使用:
呼叫观察者 - 可能在
viewWillAppear
:override func viewWillAppear(animated: Bool) { // set observer for WillEnterForeground NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(WorkoutFullFace1Exercise7TVC.willEnterBackground), name: UIApplicationDidEnterBackgroundNotification, object: nil) ...}
和
停止相关任务:
// 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) }
关闭观察者:
override func viewWillDisappear(animated: Bool) { NSNotificationCenter.defaultCenter().removeObserver(self, name: UIApplicationDidEnterBackgroundNotification, object: nil) .... }
加载和解散观察者的正确位置在哪里?我已经阅读了声明使用 viewDidLoad
/deinit
、viewWillAppear / Disappear
等的线程。
任何人都可以阐明为我的场景推荐的内容,以及当前和将来可能保留的内容 'usable'(编程世界中的语言和实践似乎变化很快)。
我使用的语法是否正确?
谢谢!
我觉得一切都是正确的
Just make sure to call super implementation in each method. That can lead to some issues when you are subclassing things later
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated);
// other code
...}
// same for viewWillDisappear