我需要改进我的编码。所以我找到了更好的东西。
我的问题是我需要从10个不同的url中获取服务器中的数据。这个url有图像100。
例如我需要点击
http://192.168.11.222/images/a
http://192.168.11.222/images/b
http://192.168.11.222/images/c
http://192.168.11.222/images/d
http://192.168.11.222/images/e
http://192.168.11.222/images/f
http://192.168.11.222/images/g
http://192.168.11.222/images/h
http://192.168.11.222/images/i
所以b c d e是服务器上包含图像的文件夹。
目前我通过NSURLConnectionWithTag执行此操作,然后解析响应并获取保存。还有其他更好的方法来处理此问题吗?我还需要显示进度条,这在这种情况下也很困难。
答案 0 :(得分:1)
我会设置一个NSOperationQueue,每个URL只有一个操作,并将其设置为三个并发操作。然后使用NSURLConnection的非异步API进行下载。
对于您的进度条,在每个单独的文件完成后更新进度可能已经足够好了,并且一次执行其中两个(或其他)。无论如何,延迟可能会超过“进度”的一半,所以除非你开始尝试预测你的ping时间,否则基于传输的实际字节的进度条将不够准确(除非这些是非常大的图像)。
你将需要了解操作队列和GCD的工作方式,但是一旦你对它进行了排序,它实际上根本就没有多少代码,而且它将是坚如磐石的。
基本上你想为每个要下载的URL的操作队列添加一个“代码块”代码,队列将弄清楚如何下载每个代码,然后当每个代码块完成时,它会执行另一个块在主线程(dispatch_sync(dispatch_get_main_queue(), ^{ ... })
)上更新进度条。
答案 1 :(得分:0)
如果您要在应用中编写与网络相关的代码,我建议您查看AFNetworking,这是一个已经提供的网络API的包装,而且麻烦要少得多。