【问题标题】:sendAsynchronousRequest deprecation in iOS 9 and using it in iOS 10 with OperationQueue在 iOS 9 中弃用 sendAsynchronousRequest 并在 iOS 10 中使用 OperationQueue
【发布时间】:2023-10-22 10:01:01
【问题描述】:

我正在尝试下载 1000 多张图片,总大小为 50MB。 我的 iOS 9 代码是:

    let operationQueue = OperationQueue.main
    operationQueue.maxConcurrentOperationCount = 1
    operationQueue.qualityOfService = .background
    for url in urls{
      let urlRequest = URLRequest(url: URL(string: url)!)
      NSURLConnection.sendAsynchronousRequest(urlRequest, queue: operationQueue, completionHandler: { (response, data, error) in
          //image
      })
}

所以我想一张一张地下载图像,但现在在 iOS 10 中 sendAsynchronousRequest 已被弃用,我不知道如何将图像添加到队列中。我看到了有关在 iOS 10 中使用 sendAsynchronousRequest 的不同问题,但我没有找到如何将其添加到队列中。大多数答案是使用 URLSession.shared.dataTask(...) ,但是您不能将任务添加到队列中。任何建议如何将所有请求添加到 operationQueue ?

【问题讨论】:

    标签: swift3 task ios10 nsoperationqueue


    【解决方案1】:

    URLSession 是正确的选择。

    NSURLConnection 在队列中分派请求不同,URLSession 本身在队列中分派。

    使用

    创建自定义会话
    init(configuration: URLSessionConfiguration, 
                delegate: URLSessionDelegate?, 
                delegateQueue queue: OperationQueue?)
    

    值得一读documentation

    【讨论】: