设置实例属性时,我是否在 URL ession dataTask 中使用 [弱自我]



我不确定我是否应该在这里使用[weak self],如果我不这样做,我在设置结构数组时是否有内存问题?

URLSession.shared.dataTask(with: url) { (data, response, error) in
            if let error = error {
                self.showErrorAlertMessage(message: error.localizedDescription, title: "Some error")
                return
            }
            guard let data = data else { return }
            guard let httpResponse = response as? HTTPURLResponse else { return }
            if (httpResponse.statusCode == 200) {
                do {
                    let decodedResponse = try JSONDecoder().decode(CodableStruct.self, from: data)
                    self.structArray = decodedResponse.results
                } catch {
                    self.showErrorAlertMessage(message: error.localizedDescription, title: "Some error")
                    print("Error:(error)")
                }
            } else {
                self.showErrorAlertMessage(message: "Some error", title: "error")
            }
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
            }.resume()
    }

是的,最好在这里使用[weak self]

如果不使用,该块将保留对self的强引用,直到它被调用,因此它可能会延迟self的发布,但它不会导致memory leak,因为self没有对此dataTask的强引用。

最新更新