ios - 块的范围是什么?
问题描述
我有几个函数,每个函数都执行一些与领域相关的任务。另一个函数将这些调用的某些序列分派到后台串行队列中,如下所示:
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 实例。”
所以现在,所有函数都在 do try catch 块中创建一个 Realm 实例,然后它们对领域对象进行自己的工作。
我的问题是,如果我有一堆涉及函数 af 的不同序列,但所有序列都以函数 a 开头,我可以让 bf 强制创建领域吗?
来自领域文档(https://realm.io/docs/swift/latest):
“就像任何磁盘 I/O 操作一样,如果资源受到限制,创建 Realm 实例有时可能会失败。实际上,这只会在第一次在给定线程上创建 Realm 实例时发生。随后从同一线程访问 Realm将重用缓存的实例,并且总是会成功。”
我不知道 doStuff() 是否会将所有这些调用作为一个块调度,每个 af 调用都在该块内。或者,如果每个 af 调用实际上都在它们自己的单独块中。
因为如果它们不在同一个块上下文中,那么我不能在这些调用中强制创建领域,因为据我了解,它们可能不在同一个线程上运行。
解决方案
推荐阅读
- xamarin - 如何在 Xamarin 表单列表中制作可滚动标签
- mysql - 如何对具有不同值的列求和
- reactjs - Next JS Framework:语法构建静态文件“npm run build”运行太慢
- parameters - 无法将泰语作为 JMeter 中的参数传递
- python-3.x - 用opencv查找手写箭头的特征
- php - 如何防止注射?
- azure-aks - 在 Azure Kubernetes 服务中定义 API 服务器授权 IP 范围
- python - 在 Windows 10 VM 上使用 Python 3.8 安装 jupyter 时遇到问题
- angular - 加载失败(hello.component.ts)
- javascript - 获取 Node.js 目录中所有服务器文件的列表