【发布时间】:2021-02-06 03:59:26
【问题描述】:
按照https://stackoverflow.com/a/27712427/3286489的建议,我可以执行如下异步下载,在viewDidLoad期间调用。
func loadItems(tuple : (name : String, imageURL : URL)) {
print("Download Started")
URLSession.shared.dataTask(with: tuple.imageURL, completionHandler :
{ data, response, error in
guard let data = data, error == nil else { return }
print(response?.suggestedFilename ?? tuple.imageURL.lastPathComponent)
print("Download Finished")
DispatchQueue.main.async() { [weak self] in
self?.displayFlag(data: data, title: tuple.name)
}
}).resume()
}
这一切都很好。我的问题是,如果下载速度很慢,并且我退出了页面,我可以如何以及在哪里(viewDidUnload? 看起来已经弃用)取消获取(图像下载)任务?
【问题讨论】:
-
这能回答你的问题吗? How to cancel a URL session request
-
感谢@ClausJørgensen。看起来我可以将
URLSession.shared.dataTask分配为一个任务,然后取消它。我应该在哪里做?是在viewDidUnload吗? -
这在很大程度上取决于您的导航流程。
viewDidDisappear可能是一个不错的选择,但是您可能希望在viewDidAppear而不是viewDidLoad中加载 URL,这再次取决于您的页面何时/如何在给定的导航流中加载。 -
FWIW,
viewDidUnload不再被调用。我会亲自在deinit做。 -
@Elye 仅供参考,您还应该查看组合 API,其中
AnyCancellable类型将为您处理场景。
标签: ios swift urlsession