如何在不阻止UI的情况下将大数据加载到UITableView中

时间:2012-09-01 11:37:36

标签: iphone uitableview

我有一个tableview,我需要显示大约10,000行(本地存储在sqlite中的数据)

但是当我们跳转到该视图时,应用程序会因为加载所有这些行而被阻止(冻结)。

无论如何加载数据而不冻结UI?

PS。我们的应用被拒绝了,是不是因为这个原因?

由于

编辑: 他们拒绝并提供以下信息 “你好。

我们注意到您的应用缺少原生iOS功能。

请查看有关应用设计信息的视频:“使用入门” 视频:伟大的iPhone应用程序的成分“和”iPhone用户界面 设计,“可在iOS Developer上获得 中心http://developer.apple.com/devcenter/ios, 和iOS人机界面 指南http://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/MobileHIG.pdf在 特别是,这些部分,“很棒 iOS应用程序采用平台和HI设计 原则“http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/MobileHIG/Introduction/Introduction.html和 “人 接口原则“http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/MobileHIG/Principles/Principles.html%23//apple_ref/doc/uid/TP40006556-CH5-SW1。”

2 个答案:

答案 0 :(得分:1)

有一万行,您别无选择,只能按需加载数据。否则,您的应用程序无法以合适的级别执行。像你描述的冻结肯定足以看到你的应用被拒绝 1

这种方法对内存也相当浪费,因为在任何给定时间,你最多需要两万行。

加快速度的一种相当简单的方法是为您的数据页面准备一个NSCache(例如,每页十个项目),添加获取记录总数的代码,并修改检索的代码从单个页面读取记录的数据(使用LIMIT/OFFSET)。当您的表显示行时,它应该尝试从缓存中获取该行的页面。如果页面不存在,则应从sqlite加载,并放入缓存中。使用页面将最小化数据库的往返次数;使用缓存可以让您管理内存的最佳使用。

<小时/> 1 这次看起来你的应用程序看起来并没有被冻结,但是一旦你修复了“缺乏本机iOS功能”,冻结就会引发另一次拒绝。

答案 1 :(得分:0)

检查this演示是否延迟加载所有数据以及图像。

此示例演示了加载和显示UITableView的多阶段方法。首先从RSS源加载相关文本,以便表格尽可能快地加载,然后异步下载每行的图像,以便UI响应更快。