下面是一个简单的API类,如下所示。
class API {
func fetchData(_ callback: @escaping (Data) -> Void) {
// reqeust to server...
callback(response)
}
}
当我们在下面的代码中调用fetchData
时,我们使用[weak self]
来防止保留循环
我正在使用DispatchQueueue.main.async
更新主线程中的UI
我这里也需要[weak self]
吗fooA
和fooB
哪一个是正确的?
class MyViewController: UIViewController {
let api = API()
func fooA() {
api.fetchData { [weak self] data in
self?.doSomething()
DispatchQueue.main.async { [weak self] in
self?.updateUI(data)
}
}
}
func fooB() {
api.fetchData { [weak self] data in
self?.doSomething()
DispatchQueue.main.async {
self?.updateUI(data)
}
}
}
}
weak
和unowned
传播:
api.fetchData { [weak self] data in
// do something with self
DispatchQueue.main.async { // weak inherited
// update UI with data
}
}