1

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

谁能解释 NSOperationQueue 在这种情况下是如何工作的?

提前致谢!

4

1 回答 1

3

当前的 NSOperation 将在收到失败信号时继续使用剩下的任何逻辑,然后正常终止,从而导致 NSOperationQueue 开始运行下一个 NSOperation。如果互联网仍然没有恢复,它也会失败,并且无论网络是否重新连接,它都会继续在队列中移动,除非网络重新连接,否则所有连接都会失败。

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

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

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

于 2012-07-26T05:16:53.697 回答