【问题标题】:Staggering sqlite records with Objective C使用 Objective C 错开 sqlite 记录
【发布时间】:2011-04-10 18:01:50
【问题描述】:

我们正在生产的 iphone 应用程序可能有一个包含 100,000 多条记录的表(按比例缩放),我担心通过 SELECT * 命令将所有这些数据加载到数组或对象中会使应用程序非常慢;或者稍后会给我留下内存问题。

当视屏/视口一次只显示 30 条奇数记录时,显然将 100,000 多条记录加载到数组中有点愚蠢。

此外,我不确定将所有这些数据存储在一个对象中是否正确。

所以我的问题是,是否可以通过记录错开 sqlite,比如缓存中的 50 条记录,然后当您向下或向上滑动时,它会将适当的数量加载到缓存中。我猜它类似于 JQuery 延迟加载库,它只在视口上加载一点点,然后在你向下移动时加载更多。

我正在查看 JSON,但它似乎仅适用于 Web 服务,因为它需要一个 URL,我不确定它是否适用于手机上的文件。

因此。当数据突然开始扩展时,是否有适当的方法将 sqlite 数据加载到 Objective C 数组/对象中而不会导致问题?

感谢您的帮助。

【问题讨论】:

    标签: objective-c json sqlite lazy-loading


    【解决方案1】:

    您绝对希望避免一次加载所有内容。相反,您希望使用cursor 和更智能的查询,以便仅在实际需要显示时从数据库中提取数据;该链接指向有关如何执行此操作的一些提示。

    通常,您还希望避免盲目选择所有列。这是因为您有时可能会更新架构以添加现有代码并不总是知道如何提取的列;明确命名您期望和期望的列要好得多。

    【讨论】:

    • 您好,我以前没有遇到过Cursors,我来看看。另一种选择是在应用程序本身内部进行某种分页,但这意味着它不再滚动。如果还有其他答案,我一定会看的。
    • @worchyld:嗯,要记住的主要棘手的事情是你不能倒回光标(它背后有一个程序,而不是数据结构)所以如果你需要倒退,你有重新开始。如果您有一个单调递增的索引列,那么在实践中执行起来非常简单,而且速度也很快。
    • 我仍在寻找如何使用它的示例。我听说您可以在 tableView 中使用 OFFSET/LIMITs,但我找不到使用或如何使用它的示例。
    猜你喜欢
    • 2017-10-23
    • 2012-09-24
    • 1970-01-01
    • 2012-06-05
    • 2011-10-25
    • 2021-06-08
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多