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

时间:2012-07-26 04:55:59

标签: iphone objective-c nsoperationqueue

在我的应用程序中创建了NSOperation的NSOperationQueue以在后台下载多个图像。我想知道如果在下载数据时网络连接丢失会发生什么。是否所有这些仍在队列中的操作都标记为已完成并从中删除队列或将保持在队列中,并在再次建立网络或其他什么时再次开始下载过程?

任何人都可以解释NSOperationQueue在这种情况下的工作原理吗?

提前致谢!

1 个答案:

答案 0 :(得分:3)

当前NSOperation将继续接收失败信号时剩下的任何逻辑,然后正常终止,导致NSOperationQueue开始运行下一个NSOperation。如果互联网仍然没有回来,它也会失败,并且只要网络重新连接,就会继续通过队列,除非网络重新连接,否则所有连接都会失败。

可能有很多不同的方法可以解决这个问题,因为需要考虑很多。例如,您可以在代码中添加一些逻辑,以便在NSOperation由于网络中断而失败时将其标记为不成功,并将失败的NSOperations重新添加回队列。但是,如果网络长时间停留怎么办?您的实现是否可以继续尝试永久下载图像,或者您是否应该在放弃之前让它重新尝试特定文件下载几次,直到下次使用该功能为止?

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

如果您愿意,您甚至可以在问题中实现您询问的功能。也就是说,在网络中断时,取消NSOperationQueue中的所有剩余操作,通知用户他们必须在网络恢复时重新尝试。然后在下次调用该功能时,重新添加所有剩余的NSOperations。