2016-08-27 25 views
4

可以说我有这个火力地堡异步函数,什么是在后台排队,什么不是

// a bunch of code... 
FIRDatabase.database.reference.child("somechild").observeSingleEventOfType(.Value, withBlock{(snapshot) in 

//some code inside of the completion handler}) 

请不要过分解读的代码片段要求更多的代码,我只需要一个简单的答案。它说,“一堆代码”,假设它实际上是在主队列上的一些代码。现在,当我写下observeSingleEvent Firebase完成处理程序时,我的分析就是这样。

  1. observeSingleEvent获取后台队列上的快照,以便不阻止主队列上的UI。

  2. 获取快照后,“in”后面的代码块现在回到MAIN队列,因此可以将任何与UI相关的代码放在那里。

我的整个应用程序基于这个推理,所以如果我不正确,请告诉我实际发生了什么。

+1

这确实是Firebase数据库客户端的工作方式:所有网络和磁盘I/O在主线程中发生**关闭**,然后在主线程上调用**回调/块。 –

+0

非常感谢您的确认!安全地假设Facebook图形请求以相同的方式工作? – slimboy

回答

9

这的确是火力地堡数据库客户端是如何工作的:所有的网络和磁盘I/O发生关闭主线程,那么你的回调/块上主线程调用

+0

这是否仍然如此,或者现在有一种方法在我的自定义线程上进行回调? –

+0

@AkselWillgert您可以始终从完成块调度到自己的队列,也可以更改队列:https://firebase.google.com/docs/reference/ios/firebasedatabase/api/reference/Classes/FIRDatabase#/ C:objc(CS)FIRDatabase(PY)callbackQueue –