iOS中的并行下载

1 iphone objective-c download-manager ipad ios

我正在为我正在处理的应用程序构建下载管理器功能.作为一项要求,我们需要支持最多三个并行下载.我看到了这个论坛的一些代码示例使用相同的委托对象并创建NSURLConnection对象的多个实例.这种方法的一个缺点(我认为,我可能是错的)是,委托对象的所有回调都会发生在同一个线程上.这将导致数据包在线程上排队.我在这里错过了一些东西.

是否有任何其他方式来实现此功能,例如执行NSInvocationQueue并在不同的线程上启动单独下载,从而获得更高的效率.使用这种方法,它为跟踪每次下载,暂停/恢复下载和线程管理的进度增加了很多复杂性.

我打算在单个线程上创建异步请求,而不是出于显而易见的原因保持同步连接.此外,我正在下载大型视频文件> 100 MB并将其直接存储到文件中.我有点不清楚数据包将如何排队,我将用完或内存或它会使主线程无响应.

非常感谢任何指针或帮助.

谢谢

omz*_*omz 5

正如Tommy指出的那样,使用单独的线程来下载数据通常效率不高.它还比使用NSURLConnection主线程上的异步接口具有更高的内存开销,并且您失去了很多控制(您无法取消在后台线程上运行的同步连接).

你是对的,委托回调将全部排在主线程上,但通常,你唯一要做的就是连接数据块直到你的下载完成 - 这在计算上非常便宜.

如果您打算在下载数据之后对数据执行昂贵的计算(例如创建缩略图,解析等),则可以在连接完成下载后轻松地将该工作分派到GCD队列.这样,您不会失去对下载过程的控制,可以轻松显示进度或取消正在运行的下载,但仍然不会阻止主线程.