块的范围是什么?

时间:2018-08-30 15:01:47

标签: ios swift realm grand-central-dispatch

我有几个函数,每个函数执行一些与Realm相关的任务。另一个函数将这些调用的某些顺序分派到后台串行队列中,如下所示:

let serialQueue = DispatchQueue(label: "com.CanHarveyDentBeTrusted", qos: DispatchQoS.userInitiated)

func doStuff() {
    serialQueue.async {
        a()
        b()
        c()
        d()
        e()
        f()
    }
}

在此链接中:https://github.com/realm/realm-cocoa/issues/1970,bdash表示:

“ Realm对其对象使用线程限制,因此您需要确保与给定对象进行的所有工作均在同一线程上执行。由于GCD不能保证提交给定串行队列的所有块都将在同一线程上执行,您将需要在每个块内获取一个新的Realm实例。”

现在,函数a-f都在do try catch块中创建了一个Realm实例,然后它们对领域对象进行自己的工作。

我的问题是,如果我有一堆涉及函数a-f的不同序列,但是所有序列都将以函数a开头,我可以让b-f强制创建领域吗?

来自Realm文档(https://realm.io/docs/swift/latest):

”“就像任何磁盘I / O操作一样,如果资源受限,创建Realm实例有时可能会失败。实际上,这只能在第一次在给定线程上创建Realm实例时发生。后续对来自同一线程的领域将重用已缓存的实例,并将始终成功。”

我不知道doStuff()是否会将所有这些调用分派为一个块,而每个a-f调用都位于该块内。或者,如果每个a-f呼叫实际上都在各自的块中。

因为如果不是所有块都位于同一块上下文中,那么根据我的理解,由于它们可能不在同一线程上运行,因此我无法在这些调用中强制创建领域。

0 个答案:

没有答案