Swift [weak self] 用于在嵌套闭包中对 main 进行调度
Swift [weak self] for Dispatching on main in a nested closure
所以我读到 运行 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
吗?为什么/为什么不呢?
你想多了。对 weak self 的需求与你将要在哪个线程上无关,也与调度队列无关。如果你每次看到一对花括号都担心自己虚弱,那你就会精神崩溃。
弱自我与是否会有保留循环有关。保留循环是由于闭包捕获的对象长期存储闭包造成的。
这里不会发生这样的事情。当您只是说“现在执行此操作”时,无论线程如何,都不会出现保留循环。所以不需要任何预防措施。
所以我读到 运行 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
吗?为什么/为什么不呢?
你想多了。对 weak self 的需求与你将要在哪个线程上无关,也与调度队列无关。如果你每次看到一对花括号都担心自己虚弱,那你就会精神崩溃。
弱自我与是否会有保留循环有关。保留循环是由于闭包捕获的对象长期存储闭包造成的。
这里不会发生这样的事情。当您只是说“现在执行此操作”时,无论线程如何,都不会出现保留循环。所以不需要任何预防措施。