Swift 3 with firebase library's latest version to this date of this answer。
在您使用的每個視圖控制器,你可以有一個變量,它是一個數據庫參照火力地堡:
var ref: FIRDatabaseReference!
然後在您的viewDidLoad方法在初始化參考:
override func viewDidLoad() {
super.viewDidLoad()
self.ref = FIRDatabase.database().reference()
self.ref.child("child").observeSingleEvent(of: .value, with: { (snapshot) -> Void in
// observer code
})
// other code
}
然後當用戶不再通過去初始化器時,您可以刪除該ViewController中所有引用的觀察者。
deinit {
self.ref.child("child").removeAllObservers()
}
根據這一link這是DEINIT如何工作的:一個類的實例被釋放之前
一個deinitializer立即調用。你用deinit關鍵字編寫deinitializers,類似於初始化關鍵字的初始化方式。取消初始化器僅適用於類類型。
也可能獲得來自特定觀察員UINT,然後通過其刪除:
// Assign the Uint to your var "handle"
self.handle = self.ref.child("child").observeSingleEvent(of: .value, with: { (snapshot) -> Void in
})
// Use this to remove the observer when you are done
self.ref.child("child").removeObserver(withHandle: self.handle)
**注意觀察家們從你聲明的同一子引用刪除是很重要的。
self.ref.removeAllObservers()
都不行
**
它採取了一些時間,我理解它是如何工作的... 希望它能幫助那裏的任何人。