0

我正在构建一个 iPhone 应用程序。在数据库中我有 5000 条记录。其中我在应用程序中仅显示 50 个。但是我想问一下,如果我最初在 iPhone 视图中创建 5000 个空单元格,即使我正在显示 50 行数据,也会有内存问题吗?

4

3 回答 3

1

iPhone 的内存量有限,因此您应始终小心仅显示该视图所需的数据。您可以实现无限滚动,当您通过滚动到达屏幕底部时,您会触发一个事件并加载接下来的 25-50 条记录。

http://nsscreencast.com/episodes/8-automatic-uitableview-paging

于 2012-05-25T14:49:01.603 回答
1

使用处理表的规范方法您将快速学习的一件事是,无论模型的大小(即您打算创建的行数)如何,实际上只创建了少数行,因此内存占用仍然存在低的。

本质上,UITableView 最初会创建并呈现一屏行(加上更多的行)。当您开始向下滚动时,控制器会识别出它需要绘制一个新行。但是,它也意识到表格顶部的行已经从视图中消失了。因此,与其创建一个全新的单元格,它只需将其中一个单元格不再在视图中并使用新信息重新配置它。无论您的表格有多少行,只有那几个单元格存在于内存中。

因此,在您的情况下,内存瓶颈可能是提供单元配置的模型。如果您一次将所有 5000 行加载到内存中,那么这可能会很慢并且会消耗内存。但是手头有帮助:您从表控制器那里得到一个提示,它基本上告诉您它想要设置第 *n* 行。因此,您的模型实际上可以更有针对性,并且只加载您需要的数据。例如,既然你知道第 15 行正在被渲染,那么就去从你的数据库中获取第 15 行,而不是预先加载整个模型。

这是我用来创建具有超过 5000 行的应用程序而无需分页的方法。当然,这取决于您的用户如何导航的数据集。

于 2012-05-25T15:16:03.993 回答
1

如果你适当地构建你的表格,你将只使用少数到十几个实际的 UITableViewCell 对象,这些对象在屏幕上显示时会不断回收。

即使是 50 也是安全的。

在内存中有 5000 个数据对象和 50 个 UITableViewCell 应该是可以接受的。

特别是如果这些数据对象很小,或者您允许 CoreData 为您管理数据集做一些工作。

重要的是不要制作 5000 个表格单元视图。这是非常糟糕的做法。

于 2012-05-25T15:35:31.893 回答