我知道对视图的所有更改都应该在主线程上,但是我应该开始考虑使用什么复杂程度dispatch_async
?
它应该用于: - 数字运算(如计算复杂概率) - 保存到某种形式的持久存储 - 更新模型对象 - 初始化庞大的对象
在涉及线程之前,我对 iOS 很满意。我总是做异步网络请求,但除此之外,我只是尝试在主线程上使用最少的资源,这仍然会导致应用程序稍微滞后。
我为此搜索了多个来源,因此如果有类似的问题,请指出并原谅我的无知。
我知道对视图的所有更改都应该在主线程上,但是我应该开始考虑使用什么复杂程度dispatch_async
?
它应该用于: - 数字运算(如计算复杂概率) - 保存到某种形式的持久存储 - 更新模型对象 - 初始化庞大的对象
在涉及线程之前,我对 iOS 很满意。我总是做异步网络请求,但除此之外,我只是尝试在主线程上使用最少的资源,这仍然会导致应用程序稍微滞后。
我为此搜索了多个来源,因此如果有类似的问题,请指出并原谅我的无知。
大多数与 UI 无关但可能对您的应用程序的响应能力产生不利影响的事情都是将任务移至后台队列的候选对象。不要担心不舒服,但其中一些资源可能会有所帮助:
一个非常简单的答案:设备应该是响应式的,即尽可能立即对用户交互做出反应。因此,只要有可能,任何花费超过几分之一秒的操作都应该作为单独的线程执行。
当然,多线程可能会很棘手,但如果线程分离得很好,那就相当简单了。需要记住的最重要的一点是,UIKit 的大多数类以及许多其他类(如数组)都不是线程安全的,并且从多个线程访问它们必须同步,例如使用@synchronize
块。因此,请仔细阅读文档,例如此处。
分析您的应用程序。说真的,没有什么能告诉你你的应用程序到底在哪里变得迟钝了。我UILabel
在自己的代码中看到了意想不到的瓶颈,例如渲染和字符串处理。如果没有Instruments,我什至不会考虑优化它们。