FirebaseDatabase - removeAllObservers() - 它实际上删除了什么?
FirebaseDatabase - removeAllObservers() - What does it actually remove?
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 路径,或者这个观察者也会被删除?
根据他们的文档 ref2
仍会观察。
无法删除 所有 路径的所有观察者。
根据 documentation:
If multiple listeners have been added to a database reference, each
listener is called when an event is raised. In order to stop syncing
data at that location, you must remove all observers at a location by
calling the removeAllObservers method.
Calling removeObserverWithHandle or removeAllObservers on a listener
does not automatically remove listeners registered on its child nodes;
you must also keep track of those references or handles to remove
them.
所以换句话说,您需要将它们全部删除,它们不会自动删除,并且 MainController 中的 ref
仍会观察到。
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 路径,或者这个观察者也会被删除?
根据他们的文档 ref2
仍会观察。
无法删除 所有 路径的所有观察者。
根据 documentation:
If multiple listeners have been added to a database reference, each listener is called when an event is raised. In order to stop syncing data at that location, you must remove all observers at a location by calling the removeAllObservers method.
Calling removeObserverWithHandle or removeAllObservers on a listener does not automatically remove listeners registered on its child nodes; you must also keep track of those references or handles to remove them.
所以换句话说,您需要将它们全部删除,它们不会自动删除,并且 MainController 中的 ref
仍会观察到。