ios - Async NSURLConnection 触发其他 Async NSURLConnection : what is the best way of doing this?

标签 ios objective-c asynchronous nsurlconnection grand-central-dispatch

这是一个开放性问题,旨在了解什么是我认为可能很常见的问题的最佳实践或最常见的解决方案。

假设我有一个要下载的 URL 列表;该列表本身托管在服务器上,因此我启动了一个 NSURLConnection 来下载它。 connectionDidFinishLoading 中的代码将使用 URL 列表为每个 URL 异步实例化一个新的 NSURLConnection;这反过来会触发更多的 NSURLConnections,依此类推——直到没有更多的 URL。将其视为连接树。

检测所有连接何时完成的最佳方法是什么?

我的问题是针对 iOS7,但欢迎对其他版本发表评论。

最佳答案

几个想法:

  • 在从服务器检索列表后触发后续下载方面,只需将执行这些后续下载的逻辑放在第一个请求的完成处理程序 block (或完成委托(delegate)方法)中。
  • 在下载一堆文件方面,如果针对 iOS 7 及更高版本,您可以考虑使用 NSURLSession而不是 NSURLConnection .
  • 首先,通过启动“下载”任务(而不是“数据”任务)来下载具有适度内存占用的文件。
  • 二、可以后台下载NSURLSessionConfiguration ,即使用户离开应用程序,下载也会继续。见Downloading Content in the Background iOS 应用程序编程指南的部分。如果你这样做,有很多 i 需要打点,而 t 需要交叉,但考虑实现它是一个很棒的功能。

  • WWDC 2013 What's New in Foundation Networking了解NSURLSession .或查看URL Loading System Programming Guide 的相关章节.
  • 在跟踪您是否完成方面,正如 Wain 建议的那样,您可以跟踪发出的请求数和完成/失败的请求数,并且在您的“任务完成”逻辑中,只需比较这两个数字,并在完成数与请求数匹配时启动“全部完成”逻辑。有很多方法可以做到这一点,在某种程度上取决于您的实现细节,但希望这能说明基本思想。
  • 关于ios - Async NSURLConnection 触发其他 Async NSURLConnection : what is the best way of doing this?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27906140/

    相关文章:

    asynchronous - 如何有条件地退还不同类型的 future ?

    ios - 在 iOS 中获取展开/折叠 UITableView 的动态 UIWebview 内容高度

    ios - 使用 Swift 和 Objective-C 构建 Cocoapod : How to Deal with Umbrella Header Issues?

    ios - 在单元测试中模拟 UserDefaults 对象返回 _ArrayBuffer

    ios - ionic 在模拟器和 ionic View 中看起来不同

    objective-c - 应该如何更改此代码才能正常工作?

    objective-c - 可能的核心数据错误 : attributes named 'updated' don't work correctly?

    javascript - 谷歌云存储 (Js)、异步/等待和云功能错误

    c# - 此异步方法缺少 'await' 运算符,将同步运行

    ios - 为什么我无法获取 firestore 子集合中存储的所有文档?