Nil’ing Firebase DatabaseReference不会停止观察是否绝对正确?
在Awesome即Firebase中 ,您可以执行此操作
var r1: DatabaseReference? = nil
然后这个
r1 = Database.database().reference(withPath: "score/bucks") r1!.observe(.childAdded) { snapshot in ... }
然后玩得开心
但最终你必须做这样的事情
private func clearObservations() { // call from viewDidDisappear if r1 != nil { r1?.removeAllObservers() r1 = nil } if r2 != nil { r2?.removeAllObservers() r2 = nil } .. etc etc etc etc etc etc :/ :/ }
{关键一点:值得注意的是你不能在deinit中做到这一点,你必须在viewDidDisappear中做到这一点}
一个人不能只是看起来非常不可思议
r1 = nil // and this will remove the observor
以下情况是否诚实 :
- 如果你只是一个
DatabaseReference
, - 即你不打算
removeAllObservors
, - 事实上观察会继续下去吗?
是对的吗?
我只是想彻底澄清这一点并将其记录在案 – 它可能会帮助未来的googlers(有趣的是,我无法在任何地方谷歌上明确的边缘)。
我意识到你可以把它们放在一个hokey数组等等,但似乎不可思议的是没有人不停止观察?!
脚注
有一件事总是让我感到不安。 如果你仔细阅读doco for removeAllObservors
,它真正断言它会丢弃或终止你添加的闭包。 事实上,它并不是说removeAllObservors
实际上在iPhone中有Firebase的内涵,实际上是回家并停止观察。 我花了很多时间担心这个细节。
正如我在评论中所解释的那样,您必须手动删除观察者,因为Firebase会保留对DatabaseReference和闭包的引用。 如果你没有使用DatabaseReference它没有释放它,它有另一个引用它。
我想从文档中可以看出这是怎么回事
很多时候你会在文档中看到:
使用removeObserverWithHandle:停止接收更新。
所以这是方式,也是唯一的方法。
- 为什么不自动从一个Nib加载的视图被didReceiveMemoryWarning发布之后呢?
- 无法重新加载IOS7中的表格视图
- 为提供程序创建MZContentProviderUpload时发生exception。 (1004)
- 尝试以编程方式selectUIWebView中的文本时setStart和setEnd引发错误
- 使用MeasurementFormatter选择单位
- 如何禁用QLPreviewController打印button
- 自动布局iOS 10.3,Xcode 8.3,Swift 3.1
- 在不使用桥接头的情况下访问专用UIKitfunction
- 通过Facebook iOS SDK获取我所有的活动