I have several iOS apps that all use the same port to listen for a network beacon. On the main view I use viewWillDisappear to close the port when another view is opened, w
Better to use UIApplicationWillResignActive
and UIApplicationDidBecomeActive
due to they catch 'top rectangle catch and release event'.
I would suggest to use this root class:
class VBase: UIViewController {
fileprivate var listenersActivated = false
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
onStart()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
onStop()
removeListeners()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
onStop()
removeListeners()
}
internal func iniListeners() {
if (!listenersActivated) {
NotificationCenter.default.addObserver(self, selector: #selector(onStop), name: NSNotification.Name.UIApplicationWillResignActive, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(onStart), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil)
listenersActivated = true
} else {
}
}
internal func removeListeners() {
NotificationCenter.default.removeObserver(self)
listenersActivated = false
}
internal func onStop() {
}
internal func onStart() {
iniListeners()
}
}
Override onStop()
and onStart()
inside childs to catch all view appearance/disappearance
That is,
class SomeViewController: VBase {
...
override func onStart() {
super.onStart()
someFunctionToInitialize()
}
override func onStop() {
super.onStop()
stopTimer()
someFunctionToDesctruction()
}
}