SwiftUI中TabView关联@Published属性致内存泄漏排查求助
SwiftUI内存泄漏排查:@Published变量的引用链追踪问题
在代码审查排查内存泄漏时,定位到一处无法完全理解的泄漏问题——通过隔离代码复现后,调试内存图显示问题源于@Published var currentPage。
补充说明:1. 以下代码为简化版本,仅用于复现问题;2. 本文核心目标是理解泄漏原因,而非寻找特定解决方案。
泄漏复现步骤
- 将
TheProblematicView作为根视图嵌入UIHostingController - 通过
UINavigationController推送该视图 - 点击导航栏返回按钮弹出视图,此时确认无其他外部对象持有该视图(已测试其他同结构视图可正常释放)
复现代码
import SwiftUI @MainActor class TheProblematicViewModel: ObservableObject { // 疑似泄漏源 @Published var currentPage = 0 var slides: [TutorialSlide] = [ .init() ] } struct TutorialSlide {} struct TheProblematicView: View { @StateObject var viewModel = TheProblematicViewModel() var body: some View { PagerView( tabItems: viewModel.slides, currentPage: $viewModel.currentPage ) } } struct PagerView: View { var tabItems: [TutorialSlide] @Binding var currentPage: Int var body: some View { TabView(selection: $currentPage) { ForEach(tabItems.indices, id: \.self) { index in PageView(slide: tabItems[index]) .tag(index) } } } } struct PageView: View { var slide: TutorialSlide var body: some View { EmptyView() } }
内存图追踪疑问
从内存图中可以看到代表强引用的粗线,但追踪到ObservableObjectPublisher后,后续的引用链就无法继续追踪了——原本预期能在Publisher的引用路径中找到ViewModel的强引用来源,却只看到模糊的元数据类内容。由于对内存图的使用经验不足,请问如何操作才能从内存图中获取更多有效信息?
内容的提问来源于stack exchange,提问作者itMaxence
相关产品推荐
相关产品推荐

