3

这是一个简单的 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)
            }
        }
    }
}
4

1 回答 1

0

weakunowned传播:

api.fetchData { [weak self] data in
  // do something with self
  DispatchQueue.main.async { // weak inherited
    // update UI with data
  }
}
于 2021-07-14T18:03:30.040 回答