开发者社区 问答 正文

列表和导航与复杂细节冻结设备链接

我有一个List带着NavigationLink在……里面NavigationView和一个Button表现出一种情调。

当我显示细节没有问题,但如果我打开模式,显示细节不工作。我的设备(IPhoneXS)与CPU 100%冻结。

代码在我的模拟器上工作。

我名单上的代码:

struct ListRoomView: View { @ObservedObject var viewModel : ListRoomViewModel @State var show: Bool = false

var body: some View {
    NavigationView {
            List(self.viewModel.roomsObj) { room in
                NavigationLink(destination:TryView()) {
                    Text(room.name)
                }
                .navigationBarTitle("Home").navigationBarItems(trailing:
                    Button(action: {
                        self.show = true
                    }) { Text("Add room ✚") }
                )
            }
    }
    .sheet(isPresented: $show, content: { RoomFormView(viewModel: RoomFormViewModel(completion: self.close), show: self.$show)})
}

func close() {
    self.viewModel.update()
}

}

我的详细代码:

struct TryView: View {

var body: some View {
    VStack {
        ScrollView(.horizontal, showsIndicators: true) {
            Text("ezeaea")
            Text("ezeaea")
            Text("ezeaea")
            Text("ezeaea")
            Text("ezeaea")
            Text("ezeaea")
            Text("ezeaea")
            Text("ezeaea")
            Text("ezeaea")
        }
        Spacer()
        VStack {
            Text("ezeaea")
            Text("ezeaea")
            Text("ezeaea")
            Text("ezeaea")
            HStack {
                Text("ezeaea")
                Text("ezeaea")
                Text("ezeaea")
            }
        }
    }
    .navigationBarTitle("Try Again")
}

}

展开
收起
游客5akardh5cojhg 2019-12-03 17:19:20 458 分享 版权
阿里云 AI 助理回答

从你的描述来看,你遇到了在iOS设备上运行时性能问题,特别是当尝试在已经展示的列表中通过NavigationLink导航到TryView页面时,设备CPU使用率激增并出现冻结现象。尽管这个问题在模拟器上运行正常,但在实际设备上的不同表现可能与资源限制、渲染优化或代码执行效率有关。

这里有几个建议和排查方向,你可以尝试以下方法来优化和解决问题:

  1. 减少视图重绘:

    • 确保在TryView中的每个Text视图内容是静态的,或者如果它们依赖于数据,请确保没有不必要的计算逻辑在每次视图刷新时执行。
    • 使用@State@Binding仅在数据确实变化时才更新UI。
  2. 优化ScrollView:

    • ScrollView中,如果有大量静态文本,考虑是否可以减少直接子视图的数量,或者使用LazyVStack(垂直滚动)/LazyHStack(水平滚动)替代,以实现按需加载,减少内存占用和提高滚动性能。
  3. 检查后台任务和数据处理:

    • 确认ListRoomViewModel中的update()方法以及其他任何异步操作或数据处理逻辑是否正确管理了线程,避免在主线程上进行耗时操作。
  4. 内存泄漏检查:

    • 使用Xcode的内存分析工具(Instruments中的Leaks或Memory Graph Debugger)检查是否有内存泄漏导致的性能下降。
  5. 简化导航结构:

    • 虽然看起来不直接相关,但复杂的导航结构有时也会引起性能问题。确认在NavigationViewNavigationLink的使用上没有过度嵌套,保持导航路径尽可能简洁。
  6. 测试不同的iOS版本:

    • 有时候,特定iOS版本的渲染引擎或SwiftUI实现可能会有已知的问题。尝试在其他iOS版本的设备或模拟器上复现问题,看是否有所改善。
  7. 分批加载数据:

    • 如果ListRoomViewModel.roomsObj包含大量数据,考虑实现分页加载或按需加载机制,而不是一次性加载所有数据到列表中。
  8. 升级至最新版SwiftUI和Xcode:

    • 确保你的开发环境是最新的,因为Apple经常在新版本中修复性能相关的bug和改进框架效率。

如果以上步骤都不能解决问题,可能需要更详细的日志输出或性能分析来定位具体瓶颈所在。希望这些建议能帮助你找到并解决性能问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: