为什么都要在主线程中更新UI(iOS开发)
来源:互联网 发布:高三励志语录知乎 编辑:程序博客网 时间:2024/04/28 10:41
在 iOS开发过程中,我一直知道更新UI需要在主线程中,但也没怎么细想为什么要在主线程中,或者说为什么不能在子线程中更新UI。今天抽空自己在网上查查资料 ,了解一下这个问题。
像UIKit这样大的框架上确保线程安全是一个重大的任务,会带来巨大的成本。UIKit不是线程安全的,假如在两个线程中设置了同一张背景图片,很有可能就会由于背景图片被释放两次,使得程序崩溃。或者某一个线程中遍历找寻某个subView,然而在另一个线程中删除了该subView,那么就会造成错乱。apple有对大部分的绘图方法和诸如UIColor等类改写成线程安全可用,可还是建议将UI操作保证在主线程中。
事实上在子线程中如果要对其他UI 进行更新,必须等到该子线程运行结束,而对响应用户点击的Button的UI更新则是及时的,不管他是在主线程还是在子线程中做的更新,意义都不大了,因为子线程中对所有其他ui更新都要等到该子线程生命周期结束才进行。
在子线程中是不能进行UI 更新的,我们看到的UI更新其实是子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈,这中间的时间非常的短,就让大家误以为分线程可以更新UI。如果子线程一直在运行,则子线程中的UI更新的函数栈 主线程无法获知,即无法更新。只有极少数的UI能直接进行UI更新,因为开辟线程时会获取当前环境,如点击某个按钮,这个按钮响应的方法是开辟一个子线程,在子线程中对该按钮进行UI 更新是能及时的,如上面的换背景图,但这没有任何意义。
文/文小武数遍生命的公路牌wow(简书作者)
原文链接:http://www.jianshu.com/p/7e4fbde8b53f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文链接:http://www.jianshu.com/p/7e4fbde8b53f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
0 0
- 为什么都要在主线程中更新UI(iOS开发)
- iOS 开发中为什么更新UI都要放在主线程中?
- [转载]iOS 开发中为什么更新UI都要放在主线程中?
- iOS 开发中为什么更新UI都要放在主线程中?
- iOS 开发中为什么更新UI都要放在主线程中?
- iOS开发之为什么更新UI都要放在主线程中
- ios中刷新UI为什么在主线程里
- iOS 为什么必须在主线程中操作UI
- iOS 为什么必须在主线程中操作UI
- 为什么ios中,子线程为什么不能更新UI,必须回到主线程
- iOS主线程更新UI
- iOS 主线程更新UI
- 在主线程更新UI
- 为什么主线程去更新UI
- 为什么必须在主线程中操作UI
- 在Android中,非主线程不能更新UI
- Android 在子线程中更新主线程UI
- IOS 更新UI的主线程方法
- jstl 格式化时间日期标签讲解
- openwrt创建软件包
- Protobuffer的研究史
- SCSI work flow
- PITF(Pairwise Interaction Tensor Factorization)分解
- 为什么都要在主线程中更新UI(iOS开发)
- 用java实现二维数组的“之”字形输出
- 为ios程序设置环境变量
- 在看MATLAB的源码时一定要注意不要把分号看成冒号啊!
- 华为2016研发工程师编程题(1)----删数
- 杂谈(2)
- 验证码生成类
- Android书签整理
- 事件监听中的冒泡流和捕获流有趣现象