美文网首页
ios bug记录

ios bug记录

作者: FindCrt | 来源:发表于2016-07-12 14:05 被阅读167次

    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];

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

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

    相关文章

      网友评论

          本文标题:ios bug记录

          本文链接:https://www.haomeiwen.com/subject/xvtsjttx.html