为什么必须在主线程中操作UI
2017-02-17 10:57
337 查看
因为UIKit不是线程安全的。
如果不在主线程中操作UI,可能会造成如下的情况:
(1)两个线程同时设置同一个背景图片,那么很有可能因为当前图片被释放了两次而导致应用崩溃。
(2)两个线程同时设置同一个UIView的背景颜色,那么很有可能渲染显示的是颜色A,而此时在UIView逻辑树上的背景颜色属性为B。
(3)两个线程同时操作view的树形结构:在线程A中for循环遍历并操作当前View的所有subView,然后此时线程B中将某个subView直接删除,这就导致了错乱还可能导致应用崩溃。
虽然,iOS4之后苹果将大部分绘图的方法和诸如 UIColor 和 UIFont 这样的类改写为了线程安全可用,但是仍然强烈建议讲UI操作保证
在主线程中执行。
如果不在主线程中操作UI,可能会造成如下的情况:
(1)两个线程同时设置同一个背景图片,那么很有可能因为当前图片被释放了两次而导致应用崩溃。
(2)两个线程同时设置同一个UIView的背景颜色,那么很有可能渲染显示的是颜色A,而此时在UIView逻辑树上的背景颜色属性为B。
(3)两个线程同时操作view的树形结构:在线程A中for循环遍历并操作当前View的所有subView,然后此时线程B中将某个subView直接删除,这就导致了错乱还可能导致应用崩溃。
虽然,iOS4之后苹果将大部分绘图的方法和诸如 UIColor 和 UIFont 这样的类改写为了线程安全可用,但是仍然强烈建议讲UI操作保证
在主线程中执行。
相关文章推荐
- iOS 为什么必须在主线程中操作UI
- iOS 为什么必须在主线程中操作UI
- 为什么说android UI操作不是线程安全的 分类: Android 2014-09-23 21:08 1357人阅读 评论(0) 收藏 举报 目录(?)[+] 可能在非UI线程中刷新界面的时候,U
- 为什么Android的UI操作是线程不安全的
- 为什么WebClient在多线程中的操作会影响到UI线程(标题党)
- 4.5.3 Async耗时操作必须由子线程完成,更新UI需要由主线程完成
- 为什么 AsyncTask 实例必须在UI线程里创建?
- Android中为什么主线程更新UI,子线程执行耗时操作?
- 为什么类中的线程函数必须要声明静态?
- 非UI线程的跨线程操作
- RCP 非UI线程调用UI操作
- WPF 跨线程操作UI
- 4种在线程中操作UI的方法
- 基于接口和队列的线程操作UI方式
- 联网等类会lock线程的操作必须新开线程
- 为什么类中的线程函数必须要声明静态?
- !!c# 委托与多线程 -- 相比background来说,本方法针对当需要通过异步代理发起UI操作,而后线程中进行sleep操作的时使用
- 一个完整的操作UI线程的例子,用到了多种方式
- 分析SpinnerActivityTest中有关控件操作以及UI线程问题
- 跨线程操作UI