关于Xcode Main Thread Checker: UI API called on a background

今天写了一个实时更新相关数据的App,但是build出来发现,show 下面的warning:

[reports] Main Thread Checker: UI API called on a background thread: -[NSCell stringValue]

很奇怪,不太懂这个逻辑,什么是 UI API 呼叫背景thread?

查询一番得知,引用大大的解释:

一般做服务端的人基本没有MainThread和 BackgroundThread的概念,但是这个概念在客户端中是非常重要的,因为客户端不管安卓还是iOS,UI刷新需要始终占用主线程去刷新,如果一旦占用bg线程,虽然不会发生致命错误,但是也会提示这种warning级别的报错; 同样,如果我们把一些本应该在bg中执行的网络请求放在了Main中,那么会导致UI停止刷新,双方执行了sync操作,体验非常差,这是不规范的操作。

所以,问题的原因出在UI的处理没有强制到main thread去执行。

解决方式

方法一:

其实这个Main Thread Checker是xcode9 新增runtime check的功能,如果你的app 只是单纯的show warning没有crash的话,你可以拿到这个check,以免看着心烦😂

方法二:

我们是不可能按照方法一去掩耳盗铃的,对吧,既然问题出现在UI操作没有到主线程中,那么我们将其强制定义到主线程操作即可

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
          dispatch_async(dispatch_get_main_queue(), ^{
             //Your UI Handle Code
          });
      });

更改好处理后果然不会再show 这个warning了,瞬间感觉舒服好多😁

有遇见同样问题的小伙伴,你也试试看吧。

posted @ 2020-03-19 13:39  萧蔷ink  阅读(1970)  评论(0编辑  收藏  举报