SwiftUI中NavigationStack结合.navigationTitle引发内存泄漏问题咨询
你遇到的是Xcode 16.2、iOS 18.3版本下SwiftUI的框架bug,不用只靠手动规避组合来解决,试试这些更根本的方法:
- 修正ViewModel的属性包装器:ViewModel属于引用类型,别用
@State存储,换成@StateObject(视图独享ViewModel生命周期)或者@ObservedObject(外部传入时使用)。很多时候这类泄漏就是因为用错了属性包装器,@State本来是给值类型设计的,硬塞引用类型会导致生命周期管理异常。 - 排查引用循环:检查ViewModel里有没有持有视图相关的闭包、回调,要是有,记得用
weak或unowned修饰捕获的self,打破循环引用。 - 临时hack方案(迫不得已时用):如果必须保留当前的属性包装器写法,可以在目标视图的
onDisappear回调里手动把ViewModel置为nil,强制释放内存,但这种方法不够优雅,尽量不用。
当然,如果上述方法都没效果,再用你发现的手动规避方式——移除.navigationTitle、.refreshable或ScrollView的组合,或者调整导航标题的显示模式(比如用.navigationBarTitleDisplayMode(.inline)替代默认的全屏模式),也能绕过这个版本的框架bug。
内容的提问来源于stack exchange,提问作者Alexander Lonsky
相关产品推荐
相关产品推荐

