使用 GCD 进行线程切换,主/背景 线程切换的最佳用例是?

2016-01-12 10:23:52 +08:00
 iOran

在背景线程请求完数据, block 异步带回需要的数据,此时,应该切换到主线程更新 UI 。更新 UI 可能是一大坨代码,所以我的做法是尽可能将这一坨封装成一个函数。更复杂一些,这个更新 UI 的函数的内部,又要异步去请求数据,请求完数据 block 回来又要切换回主线程更新 UI 。

最优的推荐做法,应该是进入这个更新 UI 的封装函数之前,切换到 main-thread;还是在这个封装函数内部最开始的位置,切换到 Main-thread?

我使用 Masonry 来布局,最近老是报:

This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes. This will cause an exception in a future release.

我知道 layout 应该在主线程做,但难免,这里还是出了问题,那有没有什么最优做法,从编码习惯上就可以规范,保证线程切换不出错呢。所以有了如上问题。

3763 次点击
所在节点    iDev
21 条回复
vincentxue
2016-01-28 10:42:55 +08:00
@huangweihua 你的比较特殊,是 block ,执行一个 为 nil 的 block 会 crash 的。你试试。所以回调一般会写成:!completionHandler ?: completionHandler();

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/250067

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX