一个 React Native 生态的重量级人物,对苹果主导的 SwiftUI 框架提出了质疑:SwiftUI 不是原生,这就是它有时卡顿的原因。
说这话的是 Krzysztof Magiera,React Native 社区动画库(Reanimated、react-native-gesture-handler)的核心作者。他的论点是:SwiftUI 抛弃了让 iOS 动画从初代 iPhone 起就丝滑流畅的关键组件 Core Animation。在 SwiftUI 里,动画在 app 进程内运行,没有 CA 的底层支撑。他配了段 1 分钟多的视频演示:阻塞主线程时,SwiftUI 里的小球卡死不动,而 UIKit 里的小球仍在渲染服务器上继续滚。

"让 iOS 动画流畅的那套机制,SwiftUI 根本没用它。" 这话从写 React Native 动画库的人嘴里说出来,本身就带着鲜明立场——毕竟 React Native 常年被嘲讽"不原生",如今轮到做 RN 的人说 SwiftUI"不原生"了。
而且他不是空口开炮。推文发出后,他在另一条里点了题:"在 React Native 里,你反而可以放心依赖 Core Animation 这套妙不可言的动画机制。"
有开发者顺着吐槽 SwiftUI 七年了几乎没进步:"在 React Native 里做出高性能原生 app 反而更容易。SwiftUI 功能有限、布局和动画性能差、开发体验平平,推出 7 年几乎没什么改进,看着真让人沮丧。"
技术细节其实值得琢磨。Core Animation 的核心是把动画在独立的渲染进程(backboardd/render server)里跑,主线程再忙也不挡动画;SwiftUI 的动画则走 app 内的渲染管线,主线程一卡,动画跟着卡。这是两层截然不同的架构取舍——Core Animation 给了你"永不掉帧"的物理隔离,SwiftUI 换来了更灵活的应用内组合,代价正是 Magiera 视频里那个卡死的球。
一个是历史最悠久的动画基础设施,一个是苹果力推的新一代 UI 框架,两边都觉得自己站在"更对"的那一侧。至于谁卡谁不卡,那段演示视频已经替 Magiera 表态了。
来源: