下载大文件

时间:2014-10-23 16:03:41

标签: ios objective-c afnetworking-2 nsfilemanager

关于制作必须下载和显示pdf的应用程序的最佳方法,我遇到了问题,它由一个JSON提供,该JSON链接到147个pdf文件,大小介于1到2 MB之间。

问题:

将所有文件下载到iPad的最佳方法是什么?

我应该使用AFNetworking 2.0吗?

NSFileManager是保存所有文件的方式吗?

我可能遇到的问题:

通过异步下载,如果连接丢失或iPad上没有更多空间,那么反击是什么?

是否有处理这种情况的教程或示例?

对不起所有问题,但我是新来的。 最诚挚的问候。

2 个答案:

答案 0 :(得分:1)

  

将所有文件下载到iPad的最佳方法是什么?

正如@rmaddy建议的那样,这非常广泛。具体问题更容易回答。有很多方法可以通过HTTP请求将文件下载到您的设备,每个方面都有优点/缺点,具体取决于您的情况。

  

我应该使用AFNetworking 2.0吗?

不确定。你不会得到我的任何争论。这是一个广泛使用且可靠的API,用于与基于HTTP的资源进行交互。

  

NSFileManager是保存所有文件的方式吗?

是。 NSFileManager是您用来从应用程序的沙箱读取/写入文件的类。

  

通过异步下载,如果连接丢失或iPad上没有更多空间,有哪些对策?

我不是100%肯定所以我无法确切地说出在这种情况下会发生什么。 AFNetworking可以通过在下载等期间写入临时文件来提供一些帮助....

  

是否有处理这种情况的教程或示例?

我在Github上有一个示例项目,它显示了一个可以下载的文件表。您可以查看下载进度,暂停每个请求,恢复和取消。完成后,您可以查看下载的文件。它使用AFNetworking,可能对您有用:

https://github.com/chefnobody/StreamingDownloadTest

答案 1 :(得分:1)

下载大文件时,主要建议是在下载时避免尝试将这些文件加载​​到内存中。相反,请确保将它们直接流式传输到持久存储。在处理特定于空间的错误方面,只需确保检查完成处理程序中返回给您的NSError个对象或相应的委托方法。

  • 如果使用AFNetworking,您可以指定outputStream的{​​{1}}来引用您创建的AFURLConnectionOperation,引用持久存储中的某个路径。

    例如,请参阅Memory pressure issue while downloading multiple files using AFNetworking

  • 或者,你可以使用NSOutputStream(无论是通过AFNetworking还是自己动手)并实例化一个NSURLSession,它会做同样的事情。

    Google" NSURLSessionDownloadTask示例"你会发现大量的参考资料。基于块的NSURLSessionDownloadTask再现非常简单。要进行后台下载有点复杂,需要基于委托的实现(请参阅{em>下载文件和处理iOS背景活动部分URL Loading System Programming Guide: Using NSURLSession或观看{{ 3}})。

无论哪种方式,您都可以避免与下载大文件相关的一些内存消耗挑战。