iOS 为什么必须在主线程中操作UI

原创 2015年11月20日 00:59:07

iOS 为什么必须在主线程中操作UI

  • 之前面试时面试官问的问题,一直在找答案,今天在微信团队的分享中看到了,Copy过来与大家分享

因为UIKit不是线程安全的。试想下面这几种情况:

两个线程同时设置同一个背景图片,那么很有可能因为当前图片被释放了两次而导致应用崩溃。
两个线程同时设置同一个UIView的背景颜色,那么很有可能渲染显示的是颜色A,而此时在UIView逻辑树上的背景颜色属性为B。
两个线程同时操作view的树形结构:在线程A中for循环遍历并操作当前View的所有subView,然后此时线程B中将某个subView直接删除,这就导致了错乱还可能导致应用崩溃。
iOS4之后苹果将大部分绘图的方法和诸如 UIColor 和 UIFont 这样的类改写为了线程安全可用,但是仍然强烈建议讲UI操作保证在主线程中执行。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

为什么都要在主线程中更新UI(iOS开发)

在 iOS开发过程中,我一直知道更新UI需要在主线程中,但也没怎么细想为什么要在主线程中,或者说为什么不能在子线程中更新UI。今天抽空自己在网上查查资料 ,了解一下这个问题。       像UIKi...

谨慎使用viewWithTag

先看如下一段代码:UILabel *cl_title = [self viewWithTag:101]; cl_title.text = infos[@"total_time"];UILabel *c...

<iOS>关于viewWithTag的一点说明

viewWithTag 会递归获取所有子视图里的视图 通常我们使用viewWithTag如下情形: 如果我们用了一个父View,上面放了多个子view, 每个子view都通过从0开始的Tag值...

IOS 动画 多线程 animationDidStop

先说一下我想做什么: 我想要在一个类A中调用另一个viewcontroler显示动画,在动画执行完之后类A继续执行 我当前的做法: 在类A中新建线程,线程中调用动画函数,并在线程前加锁,...

iOS 为什么必须在主线程中操作UI

之前面试时面试官问的问题,一直在找答案,今天在微信团队的分享中看到了,Copy过来与大家分享 因为UIKit不是线程安全的。试想下面这几种情况: 1.两个线程同时设置同一个背景图片,那么很...

为什么必须在主线程中操作UI

因为UIKit不是线程安全的。 如果不在主线程中操作UI,可能会造成如下的情况: (1)两个线程同时设置同一个背景图片,那么很有可能因为当前图片被释放了两次而导致应用崩溃。 (2)两个线程同时设...

handler必须在主线程中实例化吗?以及关于handler我所了解的

Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别 如果你不带参数的实例化:Handler handler ...

iOS多线程编程中,子线程如何访问和操作主线程UI中的视图控件(下载操作用子线程实现)

我们在iOS多线程编程中,经常会在子线程中需要操作主线程UI的视图控件,比如,把子线程中执行的运算结果,在主线程中TextView中显示。或者动态创建按钮UIButton,添加到主线程UI 视图UIV...
  • leemboy
  • leemboy
  • 2017年04月09日 21:06
  • 57

Android显示系统之View与SurfaceView更新屏幕的区别.对于View.则是在UI主线程中更新画面.SurfaceView更新屏幕,是在非UI线程(主线程)中实现SurfaceHolde

Android显示系统之View与SurfaceView更新屏幕的区别 1、View View extends Object implements Drawable...

在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)

下面的代码我调试了将近一个星期,你能够看出什么地方出了问题吗? 线程函数: DWORD WINAPI ThreadProc(     while(!bTerminate)     ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 为什么必须在主线程中操作UI
举报原因:
原因补充:

(最多只允许输入30个字)