2012-10-17 30 views
1

我有以下顺序:等待NSURLConnection的代表完成

  1. 开始MBProgressHUD微调
  2. 下载几个图像使用NSConnectionURL并实现connectionDidFinishLoading委托来显示图像
  3. 所有图像后
  4. 停止微调下载并显示包含所有图像的父视图

我应该如何实施connectionDidFinishLoading:来解决rmine是否下载了所有图像,以便我可以停止微调?

我应该跟踪下载次数,但线程安全性如何?

或者我应该看看GCD?

+0

下面的总下载次数和完成下载都没问题。 – 2012-10-17 15:40:01

回答

3

我会使用一个NSOperationQueue并提交下载作为个别块操作与同步NSURLConnection请求。您可以在此处设置最大并发操作数,这样您就不会一次下载所有内容,并且您可以免费取消。跟踪完成可以简单地通过向队列提交另一个操作来完成 - 最后一个提交的操作将在所有下载完成后运行。这可能需要将并发操作的数量限制为一个,所以另一种方法是观察(KVO)剩余操作的数量。当它下降到零时,你就完成了。

+0

发现这个http://eng.pulse.me/concurrent-downloads-using-nsoperationqueues/。有用的读取。 –

+0

是的,这与我的想法很接近。只有我不打扰子类化'NSOperation',因为你可以使用'-addOperationWithBlock:'和同步'NSURLConnection'轻松创建下载操作。 – zoul

+0

+1非常好的解决方案。 – Caleb

1

我应该如何落实connectionDidFinishLoading:确定 所有图像是否下载,这样我可以停止微调?

我会通过跟踪活动连接的数量来做到这一点。您可以将连接本身保留在可变数组中,并在连接完成时将其删除,或者在连接开始时递增计数器,并在完成时递减计数器。无论哪种方式,当活动连接的数量达到零时,您将删除微调器。