大中央调度、操作队列、异步、视图都将消失



希望这些问题对人们有所帮助。我一直在学习目标c,主要是从这本书中,我发现这本书很神奇,甚至对一个角落都很有帮助。我的问题都与此有关:

当用户更改视图时,队列会发生什么情况?我似乎找不到一个好的解释。

根据我的理解,使用NSOperation及其队列,您总是可以使用"取消"来取消它。。。但如果你不想取消怎么办?如果用户选择多个图像上传到服务器,然后您根据顺序创建一个队列,然后用户切换到一个新的视图控制器,该怎么办?这可能很耗时,尤其是在速度较慢的移动网络上。我记得在某个地方读到,iOS为一种方法提供了大约20秒的额外时间来完成它的工作,但我认为这只是当应用程序进入后台时。

对于GCD,没有取消方法。。。那么,如果使用async,后台会发生什么呢?我想如果你没有对队列的响应,我的意思是你不会以任何方式更新UI,队列不应该因为发送到另一个线程而结束吗?

我相信,就线程而言,还有很多我不理解的地方,但我希望我能把我的问题说清楚。请不要告诉我使用AFNetworking的东西。。。我试着使用所有的钥匙扣包装器,但都失败了。多亏了这本书,书中直接的苹果代码轻而易举地完成了一切。在使用更简单的方法之前,我宁愿先学习基础知识。

如果有人能抽出时间谈谈这件事,我将不胜感激。提前感谢!

您对只有设定的时间来完成任务的担忧只适用于您从应用程序切换到另一个应用程序时。在这种情况下,你可以使用beginBackgroundTaskWithExpirationHandler方法,这样,如果你的应用程序碰巧进入后台,你的应用可以请求时间来完成这些任务。有关更多信息,请参阅iOS应用程序编程指南应用程序状态和多任务部分的在后台执行有限长度任务部分。

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

在这两种情况下,在应用程序进入后台后,上述beginBackgroundTaskWithExpirationHandler将给您几分钟时间来完成排队的任务/操作。

最新更新