gpt4 book ai didi

ios - 按顺序执行 swift nsurlsession 任务

转载 作者:行者123 更新时间:2023-11-28 13:31:43 28 4
gpt4 key购买 nike

我不会一个一个执行多个NSUrlSession任务。当第一个任务完成时启动第二个任务,当第二个任务完成时启动第三个任务等

例如,我想从网络服务下载多个文件。

我希望他们开始一个一个地下载。

例如文件:1.png、2.png、3.png

我希望它们按照我编写它们的相同顺序下载。

我如何使用 NSUrlSession 做到这一点?

最佳答案

一些事情:

  1. 传统的 iOS 解决方案是将网络请求任务包装在异步 Operation 子类中(例如,this answer 的第 3 点中概述的;参见 this answer 的另一种排列基 AsynchronousOperation)。只需将队列的 maxConcurrentOperationCount 设置为 1 即可连续/顺序下载图像。

  2. 但您真的不想这样做,因为顺序下载图像会付出巨大的性能损失。唯一应该按顺序执行网络请求的情况是,如果在准备下一个请求时绝对需要一个请求的响应(例如,“登录请求”检索 token 和使用 token 进行身份验证的后续请求)。

    但是,当处理一系列图像时,同时下载图像会快得多。将它们存储在字典(或其他任何东西)中:

    var imageDictionary: [URL: UIImage] = [:]

    然后:

    imageDictionary[url] = image

    然后,当您希望图像按照原始 URL 数组的顺序排列时,您只需查找与 URL 关联的图像,例如:

    let sortedImages = urls.compactMap { imageDictionary[$0] }
  3. 或者,您可能会完全重新考虑预先下载一系列图像的概念。例如,如果这些是表格 View 中的 ImageView ,您可能只使用第三方库,例如 Kingfisher , 并使用它的 UIImageView 方法 setImage(with:):

    let url = URL(string: "https://example.com/image.png")
    imageView.kf.setImage(with: url)

    这使您完全摆脱了获取图像和管理缓存、低内存警告等业务。这种即时模式可以产生更高效的用户界面。即使您真的想提前下载它们(有点边缘情况,所以请确保您确实需要这样做),像 Kingfisher 这样的图书馆也可以解决这个问题。

关于ios - 按顺序执行 swift nsurlsession 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57244107/

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