什么时候应该在主线程上异步执行任务?

时间:2013-06-06 04:48:35

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

我理解视图的所有更改都应该在主线程上,但是在我应该开始考虑使用dispatch_async的复杂程度?

是否应该用于: - 数字运算(如计算复杂概率) - 保存到某种形式的持久存储 - 更新模型对象 - 初始化庞大的物体

在使用线程之前,我对iOS很满意。我总是做异步网络请求,但除此之外我只是尝试在主线程上使用最少的资源,这仍然是一个稍微有点滞后的应用程序。

我搜索了多个来源,所以如果有类似的问题,请指出并原谅我的无知。

3 个答案:

答案 0 :(得分:3)

大多数与UI不相关但可能会对应用程序的响应性产生负面影响的事情都是将任务移动到后台队列的候选者。不要担心不舒服,但其中一些资源可能有所帮助:

答案 1 :(得分:2)

一个非常简单的答案:设备应该响应,即尽可能立即对用户交互作出反应。因此,只要有可能,任何花费超过一秒的操作都应该作为单独的线程执行 当然,多线程可能很棘手,但如果线程分离得很好,那就相当简单了。必须记住的最重要的事情是UIKit的大多数类和许多其他类(如数组)都不是线程安全的,并且必须同步从多个线程访问它们,例如,使用@synchronize块。所以,请阅读docs,例如在这里,小心翼翼。

答案 2 :(得分:1)

配置您的应用。说真的,没有别的东西可以告诉你你的应用程序究竟在哪里变得迟钝。我在自己的代码中看到了UILabel渲染和字符串处理等意外瓶颈。没有乐器,我甚至不会考虑优化它们。