更好地处理从iPhone中的服务器获取数据

时间:2012-02-29 04:14:05

标签: iphone ipad

我需要改进我的编码。所以我找到了更好的东西。

我的问题是我需要从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执行此操作,然后解析响应并获取保存。还有其他更好的方法来处理此问题吗?我还需要显示进度条,这在这种情况下也很困难。

2 个答案:

答案 0 :(得分:1)

我会设置一个NSOperationQueue,每个URL只有一个操作,并将其设置为三个并发操作。然后使用NSURLConnection的非异步API进行下载。

对于您的进度条,在每个单独的文件完成后更新进度可能已经足够好了,并且一次执行其中两个(或其他)。无论如何,延迟可能会超过“进度”的一半,所以除非你开始尝试预测你的ping时间,否则基于传输的实际字节的进度条将不够准确(除非这些是非常大的图像)。

你将需要了解操作队列和GCD的工作方式,但是一旦你对它进行了排序,它实际上根本就没有多少代码,而且它将是坚如磐石的。

基本上你想为每个要下载的URL的操作队列添加一个“代码块”代码,队列将弄清楚如何下载每个代码,然后当每个代码块完成时,它会执行另一个块在主线程(dispatch_sync(dispatch_get_main_queue(), ^{ ... }))上更新进度条。

答案 1 :(得分:0)

如果您要在应用中编写与网络相关的代码,我建议您查看AFNetworking,这是一个已经提供的网络API的包装,而且麻烦要少得多。