因为UIKit不是线程安全的。
举几个例子:
- 两个线程同时设置同一个背景图片,那么很有可能因为当前图片被释放了两次而导致应用崩溃。
- 两个线程同时设置同一个UIView的背景颜色,那么很有可能渲染显示的是颜色A,而此时在UIView逻辑树上的背景颜色属性为B。
- 两个线程同时操作view的树形结构:在线程A中for循环遍历并操作当前View的所有subView,然后此时线程B中将某个subView直接删除,这就导致了错乱还可能导致应用崩溃。 iOS4之后苹果将大部分绘图的方法和诸如 UIColor 和 UIFont 这样的类改写为了线程安全可用,但是仍然强烈建议讲UI操作保证在主线程中执行。
博客讨论了UIKit在多线程环境中的不安全性,例如两个线程同时设置背景图片或颜色可能导致应用崩溃,以及线程间操作视图树的潜在风险。尽管iOS4后部分绘图方法变为线程安全,但建议始终在主线程执行UI更新以确保稳定性。
1603

被折叠的 条评论
为什么被折叠?



