设置实例属性时,是否在 URLSession dataTask 中使用 [weak self]?

Do i use [weak self] in URLSession dataTask when setting instance properties?

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