FirebaseDatabase - removeAllObservers() - 它实际删除了什么?

时间:2017-10-31 04:26:48

标签: ios swift firebase firebase-realtime-database observers

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 路径,或者此观察者也会被移除?

2 个答案:

答案 0 :(得分:0)

根据他们的文档ref2仍然会观察。

无法删除所有路径的所有观察者。

答案 1 :(得分:0)

根据documentation

  

如果已将多个侦听器添加到数据库引用中,则每个都是   引发事件时调用侦听器。为了停止同步   在该位置的数据,您必须删除某个位置的所有观察者   调用removeAllObservers方法。

     

在侦听器上调用removeObserverWithHandle或removeAllObservers   不会自动删除在其子节点上注册的侦听器;   您还必须跟踪要删除的引用或句柄   它们。

所以换句话说,你需要将它们全部删除,它们不会被自动删除, MainController 中的ref仍会被观察。