Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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
Iphone 使用GCD/NSD操作进行串行下载_Iphone_Ios_Download_Grand Central Dispatch_Nsoperation - Fatal编程技术网

Iphone 使用GCD/NSD操作进行串行下载

Iphone 使用GCD/NSD操作进行串行下载,iphone,ios,download,grand-central-dispatch,nsoperation,Iphone,Ios,Download,Grand Central Dispatch,Nsoperation,我有一个应用程序,我试图从URL下载图像/视频等文件。目前,我正在使用grandcentraldispatch在我的主线程上建立一个异步NSURL连接 =在后台线程上运行同步NSURLConnections,而不是在主线程上运行异步NSURConnections。我建议创建一个NSOperationQueue,而不是直接使用GCD,因为这样更容易。使用-addOperationWithBlock:或通过创建NSOperation子类将请求排队。除非您另外指定,否则它们一次只能运行一个。AFNet

我有一个应用程序,我试图从URL下载图像/视频等文件。目前,我正在使用grandcentraldispatch在我的主线程上建立一个异步NSURL连接


=

在后台线程上运行同步NSURLConnections,而不是在主线程上运行异步NSURConnections。我建议创建一个NSOperationQueue,而不是直接使用GCD,因为这样更容易。使用-addOperationWithBlock:或通过创建NSOperation子类将请求排队。除非您另外指定,否则它们一次只能运行一个。

AFNetworking是一个漂亮的库,它可以实现您想要的大部分功能。 你只需要

1) 初始化主队列(NSOPerationqueue),并将其最大并发操作设置为所需的值。有了2,我很好,而且这个应用程序响应速度非常快(从flickr下载了大量图像)

2) 将内存缓存NSURLCHACHE配置为适当的值-需要进行一些测试以适合您的应用程序使用情况-

3) 下载图像或视频时,请确定应将哪个缓存策略应用于URLRequest(使用缓存、忽略缓存等)。请注意,某些服务器不发送缓存信息头,因此,除非手动检查缓存内容并提取图像(在这种情况下,显示速度非常快),否则可能始终会发生重新验证。如果您有大量图像,重新验证可能需要时间

4) 通过标准单例访问此队列

5) 将您的操作排入该队列

这是一个低内存的脚印,工作非常好

注意:您正在清理[downloadArray addObject:imageObject];在某个时候? 注意:没有正确阅读,但对于您的情况,您可能希望将max operation设置为1,请尝试我的答案:

如果要下载多个文件,则必须使用HCDownloadViewController,因为它会创建下载队列。在下面的链接中查看我的答案


谢谢您的回复。我目前没有缓存图像,我担心的是下载大型视频。AFNetworking是否有助于我在串行队列中下载文件,而不是打开一堆连接。我一定会调查的。是的,我已经考虑过清理阵列,但我还没有决定视频流与下载视频有什么不同,所以你可能需要查看苹果的文档