移动端「UI ⇄ 状态」绑定的十八年 —— iOS 与 Flutter 两条赛道,如何从命令式手动观察,走到细粒度声明式。
objc 的《App Architecture》说,App 的本质就是 UI + Model:UI 发出动作触发 Model 更新,Model 更新又触发 UI 重建,循环往复。这一路的演进,讲的就是 「怎么把这个循环接起来」 —— 从亲手接线,到框架自动接线,再到只接「真正动了的那一根」。
同一个「乘法 ViewModel」,三个时代写下来 —— 样板越来越少,要记的规则越来越少。
addObserver:forKeyPath: observeValueForKeyPath:… // dealloc 里手动 removeObserver // 忘了就崩 / 泄漏
@Published var result = "-" // 框架自动管订阅生命周期 // 但要手动标 @Published // @StateObject/@ObservedObject 易错
@Observable
final class VM { var result = "-" }
// 一个宏搞定 · 属性级追踪
// 只重建真正读过的那块 UI
@Observable is all you need」从亲手刷新每一个 label,到一个宏自动驱动整棵视图树 —— 十八年,框架替我们接管了那个反馈循环。
而 Flutter 的 Riverpod,也在同一条「踩坑 → 出坑」的路上,走向同一个方向:只重建真正依赖了变化数据的那一小块。