swift - Swift [weak self] 用于在嵌套闭包中在 main 上调度
问题描述
所以我读到在运行时DispatchQueue.main.async { }
你不需要声明[weak self]
. 然而,我加入了一个新项目,偶然发现了这个:
public func dispatchOnMain(execute: @escaping () -> Void) {
if Thread.isMainThread {
execute()
return
}
DispatchQueue.main.async(execute: execute)
}
这是一个开放的全局功能。从这里开始,做类似的事情:
class Foo {
func bar() {
dispatchOnMain {
// Do something
}
}
}
这dispatchOnMain {
需要一个weak self
? 为什么/为什么不呢?
解决方案
你想太多了。对弱自我的需求与您将要使用的线程无关,与调度队列无关。如果你每次看到一对花括号都会担心自己虚弱,那你会很紧张。
弱自我与是否会有保留周期有关。保留周期是 由它捕获的对象长期存储闭包引起的。
这里没有发生这样的事情。当您只是说“立即执行此操作”时,无论线程如何,都不会出现保留周期。所以没有必要采取预防措施。
推荐阅读
- python - 如何通过使用图像的 url 将图像存储在数据库中
- python-3.x - read_html 导致第一行作为列标题名称,尽管 header = None
- qt - QML 在窄与宽布局中包装按钮
- java - 使用 EXTERNAL_PROPERTY 的杰克逊多态性不适用于 kotlin 默认值
- cuda - curandState*的PyCUDA非法内存访问
- python - 在python中复制预测模型
- javascript - 是否可以将基于 js-dom 的酶包装器与 react-testing-library 一起使用?
- nginx - 使用 Nginx 入口在 AKS 中关闭的连接
- python - 返回 2017 年的日期 ('Mon' , 'Tues' , 'Wed',...)
- android - 连接USB设备时如何防止Android创建新活动?