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

时间:2019-06-03 10:12:51

标签: swift struct automatic-ref-counting weak-references

我不确定我是否应该在这里使用[weak self],如果我不设置struct数组,是否会遇到内存问题?

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()
    }

1 个答案:

答案 0 :(得分:1)

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

如果不使用,该块将对self保持强烈引用,直到被调用为止,因此它可能会延迟self的发布,但不会导致{{ 1}},因为memory leak没有对此self进行严格引用。