我应该选择 URLSessionDataTask 还是 URLSessionDownloadTask 来获取图像

sur*_*heW 2 ios nsurlsessiondownloadtask swift nsurlsessiondatatask

我使用URLSessionURLSessionDataTask从服务器获取图像并将其显示在应用程序中。我在这里看了看。看来URLSessionDownloadTask还有更多的选择。

目前我使用以下代码来获取图像:

let task = URLSession.shared.dataTask(with: url) {(data, response, error) in

    guard error == nil else {
        completion(error, nil)
        return
    }

    completion(nil, data)            
}        
task.resume()
Run Code Online (Sandbox Code Playgroud)

我希望能够暂停、取消和恢复从服务器获取图像的过程。我在文档中看到URLSessionDataTask也有这些选项。但它也为URLSessionTask它的 suspend 方法编写:

下载任务可以稍后继续传输数据。所有其他任务在恢复后必须重新开始。

URLSessionDownloadTask所以我的问题是:如果我需要能够在某个时刻停止获取图像并稍后恢复而不丢失当前进度,我是否应该更改用于获取图像的实现?先感谢您。

Anj*_*ghe 5

NSURLSessionDataTask:数据任务使用 NSData 交换数据。NSURLSessionDataTask 在后台会话中不受支持,因为它不以本地文件的形式写入内容(存储在内存中)。因此此后无法恢复。

NSURLSessionDownloadTask:NSURLSessionDownloadTask 直接将响应数据写入临时文件。当应用程序未运行时,它支持后台下载,并且在您的情况下允许恢复下载。

问题是您为什么要恢复尝试在应用程序中显示的“图像”的下载。它会改变吗?或者在整个应用程序中它总是相同的。如果它将来有机会改变,我认为你应该坚持下去,URLSessionDataTask因为在我看来,它会耗尽本地存储来一遍又一遍地下载和写入图像。

使用NSURLSessionDownloadTask的风险在于,在下载之前,您必须检查设备上的可用下载空间是否足够继续,换句话说,必须处理 fileSize 错误,因为苹果认为这取决于开发人员来满足那些要求