问题的发现
在使用Xcode开发SwiftUI项目时,经常会遇到Xcode持续高CPU占用的问题。以往我没有重视这个问题,经常是很久之后才发现。此时,原本冰冷的Mac mini摸起来已经温热了。为此,我特意开发了一个小工具,提醒我关于这个问题。
问题的解决
最初,我发现这个问题出现的几率,和我打开的SwiftUI的文件的数量相关。打开的SwiftUI的文件越多,越有可能遇到这个问题。
就在我以为这就是真正的原因,并发文之后,我在仅打开2-3个SwiftUI文件的时候又遇到了这个问题。这次,我终于找到了是哪个文件导致的这个问题了。是MainView。应该是文件功能太多导致的。我的MainView,是一个接近2000行的文件。它包含多项功能:
- 主视图布局,侧栏视图实现
- 工具栏实现
- 各种错误弹窗处理
- 文件处理(打开、解析、保存)
- 用户订阅状态管理等。
我尝试将代码分离按照功能为多个小文件。但是问题仍旧存在。最后发现,解决的办法就是注释掉预览的代码。
关于这个问题的一些补充
- CPU占用过高是因为MainView的功能太多导致的。
- 将MainView的代码拆分到多个文件不能解决这个问题。
- 即便MainView没有在预览,即预览视图显示为刷新按钮的状态。也还是会有这个问题。也就是说,只要预览视图开着,不管有没有要求运行预览,都会导致Xcode的CPU高占用。
- 此时,就算关闭了预览也没有用。所以,后台应该是某种卡死的状态。
- 解决办法只有
- 直接关闭预览。
- 一开始就不开预览。