列表视图预先创建所有详细视图
Posted
技术标签:
【中文标题】列表视图预先创建所有详细视图【英文标题】:List view creates all detail views in advance 【发布时间】:2019-10-18 06:38:13 【问题描述】:我有一个列表视图,其中包含可以选择的项目以显示项目的详细视图,如下所示:
NavigationView
List
ForEach(items) item in
NavigationLink(destination: DetailView(item: item))
DetailRow(item: item)
显然,所有详细视图都是在创建列表视图时创建的。我认为从性能和内存使用的角度来看这是有问题的。我宁愿有一个单独的详细视图对象,然后在选择特定项目时为其设置项目值。
但我不知道该怎么做。或者上面的方式真的是一个很好的实现方式?
【问题讨论】:
【参考方案1】:SwiftUI 确保一切高效。无需担心。至少在这个简单的例子中不是。 (可能需要对高级动画进行优化,如 this WWDC talk 结尾处提到的那样。)
SwiftUI 代码是在运行时分析和执行的结构规范。因此,您的假设“所有详细视图都是在创建列表视图时创建的”是不正确的。
你可以阅读here。
因此,您的代码非常完美且最佳。
【讨论】:
详细视图调用特定方法。我在那个方法中设置了一个断点。当我运行项目时,该方法被调用的次数与列表中的行数完全相同。 @G.Marc 这比屏幕上的单元格还多吗?如果您看到 100 个调用具有 100 个项目的列表,其中 10 个适合屏幕,那确实会很有趣。 我还没有测试过这个,但我会做的。我认为我真正的问题是,我在详细视图的初始化程序中做了一些重量级的事情。我可以把这些东西放在别的地方,但它必须在单击该行时执行。 我刚刚接受了这个答案,因为它是真的,并不是所有的细节视图都是提前创建的,而只是可见的。无论如何,了解这一点很重要,因为当您在详细视图的初始化程序中执行资源密集型操作时必须注意这一点。以上是关于列表视图预先创建所有详细视图的主要内容,如果未能解决你的问题,请参考以下文章