ios bug记录

1.副线程刷新UI问题

一个view已经removeFromSuperView了,可是界面上还是有它,甚至dealloc方法都有已经调用了。然后过了1分钟左右,才自己消失

一开始以为是UI线程被阻塞,导致界面没有刷新,后来发现alertView弹框是正常的,点击也有效果。

然后仔细观察了下手机的日志信息,在Xcode的控制台(Console)里没有看到任何信息,然后在window->device里面看整个手机的日志信息,发现在后面自动消失的时候,有了一句话:
CoreAnimation: warning, deleted thread with uncommitted CATransaction; set C
带有CoreAnimation,我猜就是和这个显示的bug有关了,查了下,在stackoverflow里查到了一个原因:在副线程执行了UI操作。

把removeFromSuperView放到主线程果然好了。以前以为在副线程操纵UI,只会导致奔溃或者没有问题,没想到会有延迟更新。


2017.5.25 更新

评论里朋友提了个好问题,关于为什么副线程修改没有及时响应。

原因就是报错提示里说的那样,CATransaction没有提交。负责绘制的Core Animation会把CATransaction提交的layer更新提交给GPU去显示。主线程有个默认开启的CATransaction,会自动追踪layer的改变,所以主线程会迅速反应。我做了测试:

dispatch_async(dispatch_get_global_queue(0, 0), ^{

[CATransaction begin];
[_testView removeFromSuperview];
[CATransaction commit];

});
如果主动提交,则会立马更新界面。

主要参考了微信开发公众号的这篇文章,非常好!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.问题描述:duplicate symbols for architecture x86_64 原因:在在建mo...
    陶sir阅读 129评论 0 0
  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666阅读 1,420评论 0 6
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,410评论 0 35
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,027评论 0 12
  • 双十一,不是传统意义上的「节日」,不具备深厚的文化底蕴,甚至连假也不放一天。 然而自 2009 年起,却比任何一个...
    酷i递阅读 316评论 0 0