在背景线程请求完数据, 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 应该在主线程做,但难免,这里还是出了问题,那有没有什么最优做法,从编码习惯上就可以规范,保证线程切换不出错呢。所以有了如上问题。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.