升级的iOS12系统后,Xcode在调试项目时,如果遇到使用MBProgressHUD的弹框提示,就会出现
[reports] Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState]
PID: 850, TID: 218915, Thread name: com.apple.CoreMotion.MotionThread, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
这样的警告。同时,tips在第一次弹出时也会阻塞页面的滑动流畅度,严重影响用户体验。
出现原因:
升级到Xcode10以后,貌似多出了这么个东西,(以前可能也有,没太注意。。)
Main Thread Checker。
我们都知道,针对UI的操作必须在主线程执行,如果没有在应该在主线程执行的操作放在了 background thread里去,Xcode一般都会给个蓝色字体的提示,并且在当前页面还会指出具体的问题代码。
但是在使用MBProgressHUD 出现了上述问题,Xcode只是简单的在这个问题给个了警告,并未指出出问题的具体代码。导致我花了很长时间来定位出问题的位置。。。
经历了相当蛋疼的查找定位到了原因。就是下面注释的语句导致的。
其实这个方法的作用,是给MBProgressHUD 的tips 加一个视差效果,(不得不佩服,MBProgressHUD的作者真的想的很周到,但是具体的效果好像也不是很明显。。。)
在GitHub上,针对这个问题MBProgressHUD作者也给出了解决办法如下:
最后的解决办法:
注释掉 这一句就好了。
[bezelView addMotionEffect:group];
或者勾选掉Main Thread Checker选项
MBProgressHUD的作者也给出了另一种方法:
将这个属性设为NO
hud.defaultMotionEffectsEnabled = NO;
我是直接用了第一种方法,作者给出的方法试了,好像没用,也可能是我使用过的姿势不对。
附上一个链接,感兴趣的去看看吧