gpt4 book ai didi

ios - 是否需要保留对 URLSessionTask 的引用?

转载 作者:行者123 更新时间:2023-11-28 10:41:28 24 4
gpt4 key购买 nike

我阅读了几个与 URLSessionURLSessionTask 相关的示例,其中显示了代码片段和/或示例项目可供下载。示例是关于使用 URLSessionDataTask 向 REST 服务请求一些信息的非常常见的场景,其中大多数都具有与此类似的类:

var defaultSession: URLSession
var dataTask: URLSessionDataTask?

override init() {
let configuration = URLSessionConfiguration.default
self.defaultSession = URLSession(configuration: configuration, delegate: nil, delegateQueue: self.operationQueue)

super.init()
}

func callService(with searchUrl: URL, completion: @escaping (Data?, URLResponse?, Error?) -> Void) {
dataTask = defaultSession.dataTask(with: searchUrl, completionHandler: completion)
dataTask?.resume()
}

我发现通常会保留对 dataTask 的引用,但不会在该函数之外的任何其他地方使用它。保留对 dataTask 的引用的原因是什么?

最佳答案

如果您只想执行一次数据任务,则无需保留对 URLSessionDataTask 实例的引用。你可以简单地做 defaultSession.dataTask(with: searchUrl, completionHandler: completion).resume()

但是,保留对 URLSessionDataTask 实例的引用会很有用,以防您希望在它完成执行之前暂停或取消它。

您的 callService 方法中似乎也有错字。 withUrl 输入参数没有在任何地方使用,但是有一个对 searchUrl 的引用,它不是输入参数,所以我想你想调用 URL 输入参数searchUrl.

func callService(with searchUrl: URL, completion: @escaping (Data?, URLResponse?, Error?) -> Void) {
defaultSession.dataTask(with: searchUrl, completionHandler: completion).resume()
}

关于ios - 是否需要保留对 URLSessionTask 的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50333165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com