【问题标题】:SwiftUI - Is there a known memory leak issue with Navigation View?SwiftUI - 导航视图是否存在已知的内存泄漏问题?
【发布时间】:2020-01-01 22:24:07
【问题描述】:

似乎当我创建一个视图模型并添加一个 deinit 方法时,当该视图在屏幕上不再可见时它不会被调用。

请参阅演示此的附加项目。

运行项目,点击登录按钮,您应该会看到一条控制台消息“de init not logged in view view model”,此行为是正确的,因为该视图不再可见,因此关联的视图模型已删除初始化。

但是,现在按屏幕上的“注销”按钮,这一次您将看不到 de init 消息,因为登录的视图视图模型似乎仍在某处,但是如果您再次按登录,那么您将看到 2x 消息,因此只有在重新初始化登录的视图模型时,它才会取消初始化前一个,实际上它应该已经被取消初始化。

如果我删除登录视图上的 NavigationView 包装器,那么它会按预期工作,所以我认为导航视图包装器中存在错误?还是我做错了什么?

在这里下载测试Xcode项目,因为它太复杂而无法截图,如果你运行它并查看它会更容易。Download Test Xcode Project

【问题讨论】:

  • 我建议将其上传到GitHub,因为它更难信任未知站点。还要提供一些代码、图像或其他可能有帮助的东西。
  • 您好,感谢您的评论。我会这样做并更新我的帖子。

标签: ios swift swiftui navigationview


【解决方案1】:

我发现如果你使用

NavigationView { }.navigationViewStyle(StackNavigationViewStyle())

它将解决Apple所说的关于StackNavigationViewStyle的内存泄漏

StackNavigationViewStyle() :由视图堆栈表示的导航视图样式,一次只显示一个顶视图。

【讨论】:

  • 任何解释为什么这会修复内存泄漏?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 2021-09-09
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多