我不确定我是否应该在这里使用[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
的强引用。