1.副线程刷新UI问题
一个view已经removeFromSuperView了,可是界面上还是有它,甚至dealloc方法都有已经调用了。然后过了1分钟左右,才自己消失
一开始以为是UI线程被阻塞,导致界面没有刷新,后来发现alertView弹框是正常的,点击也有效果。
把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];
});
如果主动提交,则会立马更新界面。