Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我应该在这个完整的场景中使用操作队列吗?_Ios_Nsurlsession_Nsoperation_Nsoperationqueue_Nsurlsessiondownloadtask - Fatal编程技术网

Ios 我应该在这个完整的场景中使用操作队列吗?

Ios 我应该在这个完整的场景中使用操作队列吗?,ios,nsurlsession,nsoperation,nsoperationqueue,nsurlsessiondownloadtask,Ios,Nsurlsession,Nsoperation,Nsoperationqueue,Nsurlsessiondownloadtask,我需要执行以下步骤的场景: 使用用户提供的一些搜索参数进行网络呼叫 然后,解析其JSON响应并创建模型实体 然后,对于创建的每个实体,如果其具有关联的图像URL,则调用相应的服务下载此类图像,并在下载完成时在UICollectionView中显示该图像 下载需要的N个映像时,我需要处理并发网络调用。用户应该有可能取消当前搜索流并启动一个新的搜索流。此外,我应该考虑到某个图像的单元格尚未显示或已退出队列。所以,我的问题是:哪种方法是最好的 直接使用URLSession和URLSessionDow

我需要执行以下步骤的场景:

  • 使用用户提供的一些搜索参数进行网络呼叫
  • 然后,解析其JSON响应并创建模型实体
  • 然后,对于创建的每个实体,如果其具有关联的图像URL,则调用相应的服务下载此类图像,并在下载完成时在
    UICollectionView
    中显示该图像
  • 下载需要的N个映像时,我需要处理并发网络调用。用户应该有可能取消当前搜索流并启动一个新的搜索流。此外,我应该考虑到某个图像的单元格尚未显示或已退出队列。所以,我的问题是:哪种方法是最好的

    • 直接使用
      URLSession
      URLSessionDownloadTask
      执行第一个网络调用(无并发)和JSON响应解析,并使用
      Operation
      OperationQueue
      执行后续步骤。如果用户要取消当前搜索,请对
      URLSession
      使用
      invalidateAndCancel()
      ,对
      OperationQueue
      使用
      cancelAllOperations()
    • 使用
      操作
      操作队列
      执行整个过程
    • 还有其他更合适的方法吗

      • 最好的方法是执行同步或异步调用以进行第一次服务调用。完成后,同步解析json,然后使用延迟加载概念(异步调用)加载任何要下载的图像以显示图像

        执行网络调用,然后创建模型对象。通过API完成块将这些返回给VC


        然后重新加载集合视图并将url传递给每个单元格,让每个单元格都为自己担心,使用类似SDWebImage的内容在单元格中异步显示图像。

        用于后续网络调用,因为使用NSOperationQueue,这些图像之间没有依赖关系或优先级(在这种情况下,我能想到的主要好处是依赖性和优先权)我相信这不会增加任何价值。您可以启动NSURLSession的多个数据任务,然后在URLSession上调用invalidateAndCancel是有意义的。但是,为了下载图像并在CollectionView中显示它,我更喜欢使用SDWebImage。它会广泛缓存、下载图像并自行更新UI,并在collect中高效地显示图像ionView/tableView:DSync网络调用!!!嗯,这很有趣,NSURLSession的哪个API进行同步调用???据我所知,网络调用没有同步API不是NSURLSession。NSURLSession或URLSession完全是一个异步服务调用。你可以使用过时的NSURLConnection。尽管我看不出有必要使用你这样做。很抱歉,我的问题的标题可能有点混乱……实际上我的问题是关于使用
        URLSession
        s或(异步)
        Operations
        sURLSession进行服务调用,使用Operation queue/URLSession进行图像下载。