NSOperation在下载大量数据时如何处理网络连接丢失?

问题描述:

在我的应用程序创建NSOperationQueue的NSOperation下载多个图像的背景。我想知道如果下载数据时,网络连接丢失会发生什么。是否所有仍在队列中的操作都标记为已完成并从队列中删除或者当网络重新建立或者其他的事情时,将保持队列并再次开始下载过程?NSOperation在下载大量数据时如何处理网络连接丢失?

任何人都可以解释NSOperationQueue如何在这种情况下工作?

在此先感谢!

当前的NSOperation将继续收到失败信号时留下的逻辑,然后正常终止,导致NSOperationQueue开始运行下一个NSOperation。如果互联网还没有回来,它也会失败,并且不管网络是否重新连接,都将继续在队列中移动,除非网络重新连接,否则将失败所有连接。

可能有不同的方法来处理这个问题,因为需要考虑很多。例如,如果由于网络中断而导致NSOperation失败,则可以在代码中放置一些逻辑来标记NSOperation失败,并将失败的NSOperations重新添加到队列中。但是,如果网络长时间停滞不前,该怎么办?您的实施可以继续尝试永久下载图像,还是只应让它在下次使用该功能之前让其重新尝试下载特定文件几次?

你也可以使用一系列的网络可达性检查,比如在NSOperation被添加到队列之前,在NSOperation本身启动NSURLConnection之前,等等。如果它失败了,你可以让NSOperation等待,直到网络重新连接并继续。 (这样做并不理想,但是因为您在后台线程上运行它,所以至少不会冻结应用程序的界面)。

如果你想,你甚至可以实现你问的关于你的问题的功能。也就是说,在网络中断时,取消NSOperationQueue中的所有剩余操作,通知用户,当网络重新启动时,他们将不得不重新尝试。然后在下一次调用该功能时,重新添加所有剩下的NSOperations。

+0

感谢@Andeh的回答,我认为当没有网络时NSOperation会正常终止,因为根据我的要求,它会在特定的时间间隔后再次下载图像。 – 2012-07-27 06:05:21