美文网首页
主线程异步是个好东西

主线程异步是个好东西

作者: 小冰山口 | 来源:发表于2018-11-28 00:32 被阅读0次

    本人有若干成套学习视频, 可试看! 可试看! 可试看, 重要的事情说三遍 包含Java, 数据结构与算法, iOS, 安卓, python, flutter等等, 如有需要, 联系微信tsaievan.

    主线程异步是个好东西

    可以帮助我们解决很多问题, 项目中经常会遇到一些奇怪的bug:

        dispatch_async(dispatch_get_main_queue(), ^{
            [self.upShadowView mas_makeConstraints:^(MASConstraintMaker *make) {
                make.top.left.right.mas_equalTo(self.reasonPickerView);
                make.height.mas_equalTo(self.reasonPickerView.tg_height * 0.1);
            }];
    
            [self.downShadowView mas_makeConstraints:^(MASConstraintMaker *make) {
                make.bottom.left.right.mas_equalTo(self.reasonPickerView);
                make.height.mas_equalTo(self.reasonPickerView.tg_height * 0.1);
            }];
        });
    

    比如上面这段代码:

    image.png

    我用到了reasonPickerView的高度, 但是我在布局的时候不一定能拿到reasonPickerView的高度, 那么我们应该怎么办呢? 一般的想法是会在layoutSubviews或者viewWillLayoutSubviews或者viewDidLayoutSubviews等方法, 但是这些方法, 除了会出现新的bug之外, 还会有重复调用多次的问题, 但是有一种解决思路就是主线程异步.

    因为主线程异步并不会开辟新的线程, 只是把队列任务放到异步执行, 等待主队列中的当前任务都完成, 主线程空闲的时候, 再来执行需要执行的任务, 那么在本例中, 等到执行到画红色方框的代码时, 主线程中之前的布局任务都已经完成了, 这时候是肯定可以拿到reasonPickerView的高度的, 那么这时候, 再完成upShadowView的布局就不会出现bug了.

    总之, 主线程异步在项目中是个很常见, 也很有用的小技巧, 谁用谁知道😁

    PS. 本人有若干成套学习视频, 包含Java, 数据结构与算法, iOS, 安卓, python, flutter等等, 如有需要, 联系微信tsaievan.

    相关文章

      网友评论

          本文标题:主线程异步是个好东西

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