cha*_*eyh 1 asynchronous objective-c nsurlconnection nsoperation ios
我有一个从Flickr下载几张照片的应用程序.现在,所有照片都是通过自定义NSOperation类运行下载的.NSOperationQueue但是,我听说NSUrlConnection异步效率更高,并且想知道哪种情况更好?或者,是否有第三种选择甚至比这两种更好?自定义NSOperation只是[NSData dataWithContentsOfURL:]在不同的照片上多次调用.
使用一种利用NSOperation的子类并封装NSURLConnection并在异步模式下使用的方法(实现委托协议)可能是最有效的,如果你另外考虑这些方面:
确保NSOperation子类快速处理委托方法,并且不会使用底层线程(或队列)来处理响应数据.理想情况下,委托方法将部分响应数据传递给处理它们的另一个队列或线程(注意:图像数据可以预加载到后台线程或队列中!).
这样做的原因是,网络操作越早完成,每次执行的请求就越多.网络NSOperation应放入NSOperationQueue,其最大并发操作数设置为1或2.很少为4或更高.此设置取决于服务器是否支持流水线操作以及连接速度.将队列命名为"网络绑定队列".
"数据处理"(预加载图像数据)任务理想情况下也是NSOperation的子类.同样,"数据处理"操作应该在CPU绑定的NSOperationQueue中排队.默认情况下,NSOperationQueue的最大并发操作已经适用于CPU绑定操作.
如果要将数据保存到磁盘,理想情况下,您需要创建NSOperation并将这些磁盘操作排入"磁盘绑定队列".在设备上,这似乎没有必要,但如果你仍然有这么古老的"磁盘" - 将最大并发操作数设置为磁盘独立磁头数是有意义的.;)
好吧,当连接速度非常快并且您能够在同一时间处理那么多数据时,这一切都可能只会产生差异.我们在设备上讨论的是每秒5兆字节,在实验室顶部可能是每秒25兆字节.
| 归档时间: |
|
| 查看次数: |
2895 次 |
| 最近记录: |