ios - Swift 初始化程序调用 Dispatch Queue 异步
问题描述
从 Swift 对象初始化程序中调用 async 是错误的,例如这个
let serialQueue = DispatchQueue(label: "com.myApp.SerialQueue")
private let property1:Int?
public override init()
{
super.init()
/* Initialize properties */
setupProperties()
serialQueue.async { [unowned self] in
self.nonBlockingSetup()
}
}
private func setupProperties() {
self.property1 = 1
}
private func nonBlockingSetup() {
//Some non-blocking code that shouldn't run on main thread
}
有人说在 init 返回之前异步调用是有问题的。需要知道 Swift 语言是怎么说的。
编辑:如果我修改代码如下有什么区别:
public override init()
{
super.init()
/* Initialize properties */
setupProperties()
callNonBlockingCodeAsync()
}
private func callNonBlockingCodeAsync() {
serialQueue.async { [unowned self] in
self.nonBlockingSetup()
}
}
解决方案
推荐阅读
- vba - 用 vba 写一个特定的拆分函数
- jquery - 将 $(this) 传递给匿名回调函数
- javascript - 在 jBoss 6.2 与 jBoss 7.3 中部署应用程序时的不同响应
- azure - 创建 Github CI/CD 管道并部署到 Azure 云 Asp.net core 和 React Project
- javascript - 如何在角度中用前导零填充值
- reactjs - 更改按钮 bgcolor 取决于道具
- css - 如何在反应中加载带有过渡的img?
- javascript - 如何在 reactjs 中编写身份验证流程测试
- angular - 由于订阅,无法将对象传递给组件
- javascript - 从配置文件脚本 (SuiteScript) 访问 NetSuite 模块