【问题标题】:should the firebase object be a singleton in swift?firebase 对象应该是 swift 中的单例吗?
【发布时间】:2015-02-13 20:58:04
【问题描述】:

在 firebase sdk 的 ios Swift 实现中,firebase 对象是否应该存储在单例中?还是它会自动管理和关闭视图之间的连接?

例如,在每个视图中创建一个 firebase 对象会创建多个套接字连接吗?只保留一个 firebase 对象会更有效吗?

let ref = Firebase(url: "https://" + kFireBaseHost + ".firebaseio.com/")

【问题讨论】:

  • 任何发送一次的东西都可以是单例。但是考虑一下你的用例,如果你在使用同一个对象的同时异步创建多个连接,你会遇到很多问题。虽然! firebase 确实允许它的经理这样做,只是要小心。
  • 所以通常不同的视图将访问firebase中的不同对象,但可能会有一些重叠,比如访问用户信息......所以让单身管理重叠连接是否有意义...... . 还是已经内置到 firebase 对象中,以便它管理自己的连接并将连接池连接到相同的 firebase 路径?
  • 是的,管理器将能够处理到相同路径的异步连接。这种方法还可以提高效率,但也要考虑到它在处理回调时可能引起的麻烦。

标签: swift firebase


【解决方案1】:

你不需要做一个单例。在幕后,Firebase 管理一个连接,如果您有多个 Firebase 对象,或者即使您在一个位置有多个观察者,它也会适当地进行重复数据删除。如果您为每个视图创建一个新的 Firebase 对象,只要它使用相同的基本 url,它仍将使用与服务器的相同连接。

虽然您不需要管理拥有多少 Firebase 对象,但您应该管理您的观察者。这些不会在视图之间被删除。要删除观察者,您可以将observeEventType 方法返回的FirebaseHandleremoveObserverWithHandle: 方法一起使用或调用removeAllObservers。请注意,这两种方法都要求您在与附加观察者的位置相同的 url 位置调用它们(尽管它不必是相同的对象,只需相同的 url)。如果您不删除观察者,您可能会看到它们从您离开的视图中触发,因为其他人正在更改数据。你可以阅读更多in the docs under Detaching Blocks

这对于 Swift 或 Objective-C 来说都是正确的。

【讨论】:

  • 所以应该在视图控制器中保留对句柄的引用并在视图中删除它们将消失方法并在视图中重新附加将重新出现......还是在视图卸载时分离更好?
  • 是的,我会在 viewWillAppear / viewWillDisappear 中处理观察者句柄操作,而不是加载/卸载方法,因为您只想在视图显示时同步数据。
  • 等等,为什么你需要再次移除观察者?因为拥有多个优秀的观察者会降低性能?
  • 基本上。观察者不会自动清理,因此它们将继续存在并可能保留其他资源或意外触发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 2022-11-28
  • 2012-03-21
相关资源
最近更新 更多