iphone - 将大量 Sqlite 行加载到 UITableView 中

标签 iphone objective-c ios ipad sqlite

需要在我的 UITableView 中加载 20,000 个项目,我想知道执行此操作的最佳方法是什么。我目前在 SQLite 中使用直接查询。这会消耗太多内存,并且离开应用程序的速度很慢。

最佳答案

有几个选项:透明地分页数据或实现类似邮件的功能,您可以在其中单击以加载 25 个以上。

如果透明地分页数据

UITableView 具有诸如行的总数据和加载数据之类的回调,因此非常完美,它是虚拟的并且可以重复使用单元格。

但是,您不能进行基本选择,您必须一次选择 x - 例如,一页 50。您必须首先为完整查询选择 count(*),以便知道然后计数。然后,当回调请求第 353 行时,您需要计算第 8 页(读取 50 页),选择这 50 页并返回第 353 行的数据。当请求 354 时,内存中已经有第 8 页,因此您返回。当您越过页面边界时,您将不得不重新选择。内存减少,因为您一次只在内存中保存一页结果。

有趣的问题是如何以稳定的方式一次查询 50 个。最简单的模式是递增稳定的 int id。这取决于你的数据。例如,如果它是一个基于用户的谓词查询,您如何保持 20K,以便您可以一次进入 50 个分页?如果没有内存,您将被迫将用户谓词的结果写入 sqlite 中的另一个表。

如果您想优化,您可以按照用户滚动的方向提前阅读下一页(要求行递增还是递减?)这可能会超过页面边界的停顿。

如果一次加载 25 个以上

那个模式要简单得多。在表格的底部,用户可以点击加载 25 个,然后您更改总数回调并重新加载数据。

权衡?

好吧,显然,分页的好处是无论用户滚动多远,每次都不会将超过一个(或 n)页选入内存。在 25 more 模型中,随着用户对数据集的深入和深入,它会消耗更多的内存。透明分页显然要复杂得多,因此您应该考虑您想要什么样的用户体验以及人们将在多大程度上进入数据集。

最后一点,如果您有那么多行,您将需要一个按字母顺序排列的索引(或类似的概念),以便用户可以跳过那么多数据。您还可以回到绘图板并考虑是否有其他数据或访问模式来避免 View 中出现 20K 行:)

关于iphone - 将大量 Sqlite 行加载到 UITableView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8400069/

相关文章:

ios - React Native,应用程序在模拟器上运行,但不能在真实的 iPhone 上运行

ios - 当我将 CALayer I 添加到自定义 UIView 时,我隐藏了一个子 UIImageView

ios - UISplitViewController - 我怎样才能暂时提供另一个 TableView Controller 来代替小型主视图 Controller ?

ios - 在 native react 中如何安排图像按钮

iphone - iPad 问题中的 NSDateFormatter

iphone - 如何在 iOS6 中制作与 iOS5 相同的 map

c# - 带有(一点点)Unity 3D 的 iOS 项目?

objective-c - Objective-C (OSX) 中的程序目录

objective-c - 在 iPhone 应用程序中使用 UiWebView(用于支付)会被拒绝吗?应用程序是一种网络服务

objective-c - 如何使用基类对象定义初始化器来填充基类属性?