是否需要引用URLSessionTask?

时间:2018-05-14 14:46:46

标签: ios swift nsurlsession nsurlsessiondatatask

我正在阅读与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的引用的原因?

1 个答案:

答案 0 :(得分:3)

如果您只想执行一次数据任务,则无需继续引用URLSessionDataTask实例。您只需执行defaultSession.dataTask(with: searchUrl, completionHandler: completion).resume()

即可

但是,如果要在完成执行之前暂停或取消它,保留对URLSessionDataTask实例的引用会非常有用。

您的callService方法似乎也有拼写错误。 withUrl输入参数在任何地方都没有使用,但是引用了searchUrl,这不是输入参数,所以我想你想要调用URL输入参数{{ 1}}。

searchUrl