在项目开发的过程中遇到这样一个问题,iPhone6上聊天列表在reloadData时无法成功加载数据,但是只要手指滑动UITableView即可成功加载。
期初被该问题给困惑住了,始终没搞明白是啥问题,后在网上查询资料终找到问题之所在并解决该问题。现将问题的分析及解决方案贴出来:
1、在子线程中无法进行UI的更新,如果表象更新成功那只是一个幻象。因为在子线程中,代码执行完毕后会自动进入主线程,从而执行子线程中UI更新的函数,这个过程是非常快速的,导致大家误以为子线程可以更新UI。如果子线程一直在运行,那么主线程就无法获知子线程中更新UI的函数栈,从而无法更新UI。
2、在一些情况下能够在子线程中更新UI,这是因为在开辟线程时即可获取当前环境,比如点击按钮响应,实质上就是开辟了一个子线程,在这个子线程中能够及时对按钮的UI进行更新(例如换标题、背景等)。
综上所述,对于UI的更新要在主线程中执行。
时间: 2024-10-07 00:32:08