在使用 Xcode 進行 Swift 語言開發軟件的時候,不少人在項目中後期都會遇到這麼一個問題,如題圖那樣:SourceKitService 佔用大量的 CPU 和內存,甚至直接導致系統卡死。
那麼,這到底是怎麼一回事呢?在 StuckOverflow 上的高票答案是這麼說的:
在活動監視器裡找到 SourceKitService 雙擊它,看它打開了哪些目錄,去把緩存刪除然後強制結束進程。
這樣的確有助於緩解症狀,但治標不治本,甚至不出幾秒就又一次佔用 CPU 200% 了。所以,我們需要更根本的解決辦法。
其實如果你強制結束 SourceKitService ,你就會發現 Xcode 裡的代碼高亮都消失了——代碼變成了類似純文本文檔那樣的黑白色! SourceKitService 掌管了你代碼的高亮,其實它還掌管了 Swift 的類型推斷工作。
也就是說,比如你的代碼是這樣寫的:
1 |
private lazy var emojiFace = ["?", "?", "?", "?"] |
而你又圖省事反正基本不會變的內容,所以就直接寫了很長的數組把所有的表情都作為字符串給放進去了,那麼這個數組的字面量就會變得很長很長。
這時候 SourceKitService 就需要花費大量的時間來處理這些內容,對你數組的類型進行推斷——可能是由於某些內部 Bug,又或者說是 SourceKitService 天生的不完善,總之它就會卡在這裡,形成題圖中的尷尬情況。
這時候,我們需要這樣處理:
1 |
private lazy var emojiFace:[String] = ["?", "?", "?", "?"] |
也就是說,給這個數組顯式地寫明類型,這樣,SourceKitService 就不會再來處理它的類型了——因為是明確的。
同時,SourceKitService 的 CPU 佔用立即就降下去了。
本文由 落格博客 原創撰寫:落格博客 » SourceKitService 佔用大量內存和 CPU 的解決辦法
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/2209.html