盛大的中央调度,操作队列,异步,视图将会消失

时间:2014-04-14 14:18:44

标签: ios objective-c multithreading grand-central-dispatch nsoperation

希望这些问题对那里的人们有所帮助。我一直在学习目标c,mostly from this book,我发现即使对于菜鸟也是如此。我的问题都必须解决这个问题:

用户更改视图时队列会发生什么?我似乎无法在任何地方找到一个好的解释。

根据我的理解,使用NSOperation及其队列,您可以随时使用“取消”取消它...但是如果您不希望它取消怎么办?如果用户选择多个图像上传到服务器,并且您创建了包含该订单的队列,并且用户切换到新的视图控制器,该怎么办?这可能非常耗时,尤其是在速度较慢的移动网络上。我记得在某个地方读过iOS给出了大约20秒的额外时间来完成它的工作,但我认为这只是当应用程序进入后台时。

对于GCD,没有取消方法......那么如果使用异步,后台会发生什么?我想如果你没有对队列的响应,我的意思是你不以任何方式更新UI,队列是否应该完成,因为它被发送到另一个线程?

我确信,就线程而言,我还有更多不明白的地方,但我希望我能清楚地提出问题。请不要告诉我使用AFNetworking的东西......我尝试使用所有那些钥匙扣包装,但都失败了。感谢这本书,书中直接的Apple代码很容易做到。在使用更简单的方法之前,我宁愿先学习基础知识。

如果有人花时间谈论这件事,我真的很感激。提前谢谢!

1 个答案:

答案 0 :(得分:2)

您只需花费一定的时间来完成任务,这一点仅适用于您从应用切换到其他应用的时间。在这种情况下,您可以使用beginBackgroundTaskWithExpirationHandler方法,这样,如果您的应用恰好进入后台,您的应用可以请求时间来完成这些任务。有关详细信息,请参阅 iOS应用程序编程指南App States and Multitasking部分中的在后台执行有限长度任务部分。

但是,如果您仍然在应用内(无论您是否转换到其他视图控制器),您添加到操作队列中的任何内容都将继续运行,直到您取消这些操作(或应用程序)暂停或终止)。同样,您添加到GCD队列的任何内容都将继续运行,直到该应用程序被暂停或终止。

在这两种情况下,上面的beginBackgroundTaskWithExpirationHandler会让您在应用程序进入后台后几分钟完成排队的任务/操作。