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...
  • zju_bigjar
  • zju_bigjar
  • 2016年05月03日 16:11
  • 3190

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

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

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

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

iOS主线程更新UI

1.更新UI的代码必须在主线程中执行才起作用。 2. 如果不在主线程,需要调用dispatch_sync(dispatch_get_main_queue(),  ^(void)block),把更新UI...
  • johnbob2014
  • johnbob2014
  • 2016年01月26日 20:35
  • 726

iOS子线程更新UI到主线程的三种方法

以下代码有什么问题?如何修复?@interface TTWaitController : UIViewController@property (strong, nonatomic) UILabel *...
  • cordova
  • cordova
  • 2017年02月08日 22:03
  • 6690

iOS子线程更新UI的两种方法

方法1:performSelectorOnMainThread [self performSelectorOnMainThread:@selector(updateUI:) withObject:i...
  • libaineu2004
  • libaineu2004
  • 2015年04月29日 16:36
  • 24350

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

原因有2个: 1、在子线程中是不能进行UI更新的,而可以更新的结果只是一个幻像:因为子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈,这中间的时间非常的短,就让大家误...
  • ziyuzhiye
  • ziyuzhiye
  • 2017年06月21日 17:46
  • 336

为什么ios中,子线程为什么不能更新UI,必须回到主线程

1、在子线程中是不能进行UI 更新的,而可以更新的结果只是一个幻像:      因为子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈,这中间的时间非常的短,就让大家误以为...
  • stral
  • stral
  • 2016年09月30日 15:53
  • 867

iOS GCD子线程调用主线程刷新

__weak __typeof(self) weakself= self;     dispatch_async(dispatch_queue_create(0, 0), ^{ ...
  • saw471
  • saw471
  • 2016年09月05日 16:26
  • 4830

ios 中请求主线程刷新UI

IOS中只有主线程 才能立即刷新UI。如果是通过
  • remote_roamer
  • remote_roamer
  • 2014年10月13日 16:28
  • 40955
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 为什么必须在主线程中操作UI
举报原因:
原因补充:

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