gpt4 book ai didi

iphone - iOS 中的并行下载

转载 作者:行者123 更新时间:2023-12-01 17:45:36 24 4
gpt4 key购买 nike

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

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

我计划在单个线程上创建异步请求,并且出于明显的原因不保持同步连接。此外,我正在下载大于 100 MB 的大型视频文件并将其直接存储到文件中。我有点不清楚数据包将如何排队,我会用完内存还是会导致主线程无响应。

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

谢谢

最佳答案

Tommy已经指出,仅使用单独的线程来下载数据通常效率不高。与使用 NSURLConnection 的异步接口(interface)相比,它还具有更高的内存开销。在主线程上,你失去了很多控制(你不能取消在后台线程上运行的同步连接)。

你是对的,委托(delegate)回调都将在主线程上排队,但通常,你唯一要做的就是连接数据 block 直到你的下载完成——这在计算上非常便宜。

如果您打算在下载数据后对数据进行计算成本高的事情(如创建缩略图、解析等),您可以在连接完成下载后轻松将该工作分派(dispatch)到 GCD 队列。这样,您就不会失去对下载过程的控制,可以轻松显示进度或取消正在运行的下载,但仍然不会阻塞主线程。

关于iphone - iOS 中的并行下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7020795/

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