removeAllObservers()
是否会删除所有观察者 ,因为DatabaseReference
实例已被调用,或者指定路径上的任何引用?
例如:
MainController.swift
let ref = Database.(...).child("foo/bar").observe(.value, with: handler)
ItemController.swift
public var ref2: DatabaseReference?
public func someMethod() {
self.ref2 = Database.(...).child("foo/bar").observe(.value, with: handler2)
}
override func viewDidDisappear() {
self.ref2?.removeAllObservers()
}
来自 MainController 的ref
是否仍然会观察 foo / bar 路径,或者此观察者也会被移除?
答案 0 :(得分:0)
根据他们的文档ref2
仍然会观察。
无法删除所有路径的所有观察者。
答案 1 :(得分:0)
如果已将多个侦听器添加到数据库引用中,则每个都是 引发事件时调用侦听器。为了停止同步 在该位置的数据,您必须删除某个位置的所有观察者 调用removeAllObservers方法。
在侦听器上调用removeObserverWithHandle或removeAllObservers 不会自动删除在其子节点上注册的侦听器; 您还必须跟踪要删除的引用或句柄 它们。
所以换句话说,你需要将它们全部删除,它们不会被自动删除, MainController 中的ref
仍会被观察。