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()
}

来自 MainControllerref 是否仍会观察 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 仍会观察到。