關於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了,瞬間感覺舒服好多😁

有遇見同樣問題的小伙伴,你也試試看吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM