UITableViewController可以处理多大的数据?

时间:2010-11-29 12:18:22

标签: objective-c cocoa-touch uitableview ios4

我想知道UITableViewController处理的数据有多大......我明白大多数时候我们使用数组来表示每个表视图的单元格中的数据。

假设数组包含相当数量的字符串和某种整数(作为该行的id,在选择该行时传递)。然后,数组的每个元素类似于字符串的4个字节,整数的4个字节。我不确定如何计算单个tableview中可以包含的最大元素。

然而,这又引出了另一个问题:即使iOS设备可以处理非常大的数据(例如2000-3000行),向用户提供如此大量的数据是否是一个好的设计决策?在Apple的“联系人”应用程序中,他们同时显示如此多的联系人数据,同时在右侧提供A-Z快速跳转。在Twitter应用程序中,用户会看到数百条推文(如果超过一天,则会在中间切断)。

那么在向用户展示如此大量的数据时哪种方式最好?

3 个答案:

答案 0 :(得分:4)

您无需一次将所有数据保存在内存中。当然,数组是最简单的方法,但是如果你要有很多行(我猜你是因为你问了这个问题!)那么你真的需要缓存最近使用的值。

但这不是你唯一需要考虑的事情。

当第一次显示表时,它首先向代表询问有多少部分然后询问每个部分它有多少行(即使它们最初不会显示)。这意味着您拥有的部分越多,表格显示的时间就越长。

我在我的应用版本1.x和2.x之间做出的一项重大更改是减少主屏幕上显示的部分数量。我还存储了元数据 - 例如每个部分中的行数 - 因此每次视图变得可见时我都不需要计算它们。这意味着它可以处理更多行,并且即使在音量增加时也更快

答案 1 :(得分:1)

UITableView可以处理大量项目,因为它只需要显示的数据。但是,设备的限制意味着您可能无法将所有数据存储在内存中。如果是这种情况,您可以使用Core Data将存储在内存中的数据量保持在最低水平。 NSFetchedResultsController是你的朋友。

就UI而言,我认为表格右侧显示的索引栏可以使大型数据集成为可能。但是,让我们举一个3000项的例子。如果我们有25个索引点(例如A,B,C,D等),那么这将是索引点之间的120个项目。在这种情况下,我建议不要使用严格的字母索引,因为分布非常不均匀。我会解析数据并获得每个第120项的前2或3个字母。考虑到这一点,我猜想3000不会是一个伟大的用户体验。

答案 2 :(得分:0)

我认为对于大量数据,所有数据都不在RAM中的数组中,而是基于闪存驱动器(核心数据或sqlite)。 只有可见行的数据在内存中。