2011-06-20 30 views
0

如果我有一个长时间运行的任务,那么如何将其分解为一系列步骤,而不必诉诸使用单独的线程来执行?长时间运行的任务如何在不使用线程的情况下被分解?

例如,假设有一个电子表格应用程序,并且要执行大量单元格的重新计算,那么该模型如何将其分解为块?是否有一种方法将ios代码发布到自身,例如,它可以做一个块,发布一个事件,做另一个块,发布一个事件等。

或者是使用单独线程的唯一方法吗?

我有一堆ios图书,我已经开始阅读,但在任何一本书中我都找不到任何类似的东西。

回答

0

您可以使用计时器NSTimer,但如果任何事情需要很长时间,您将留下UI挂起。基本上你需要确保你所做的所有工作都是每次迭代0.01秒(大约),并且延迟每次迭代会使UI更加响应。

使用线程的原因是为了让操作系统安排一些事情,而不必担心。如果您在主线程上运行所有内容(当您尝试执行大量工作时),您将冻结UI或者经常担心计划。如果您使用线程,则主线程具有适当的优先级,以便UI保持响应。

+0

这就是我的观点 - 一些操作系统(我知道的Symbian和Brew)只有一个线程,并且可以在这些线程中运行长时间运行的任务,但不会使事情没有响应。这很好,因为您不必担心死锁,竞态条件,锁定对变量的访问,并且它可以轻松浏览IDE中的代码。所以我想知道ios是否可以做类似的事情,但唉,似乎并非如此。 – Gruntcakes

1

多线程可以是一种选择


您可以随时使用delegation(我想我只是想出了这个词,它采用委托和通过事件对象代表WHE有事)。大多数的iOS SDK对象都使用它,比如UITableView,NSURLConnection等等。

+0

我更喜欢不使用多线程,只要有可能,是不是有类似于Symbian的活动对象的机制,或者Brew的post事件等等,它允许我们实现异步性等,而不必求助于多线程以及所有这一切。 – Gruntcakes

0

看来你所要求的是你设计某种东西的方式,比如进度条。在整个长时间操作的预定时间,您更新对象或UI。这个问题有点武断,我真的不知道你的问题。尽管如此,多线程仍然是长期运营的解决方案。

相关问题