我正在构建一个iPhone应用程序。在数据库中我有5000条记录。其中我在应用程序中只显示50个。但是我想问一下,如果我最初在iPhone视图中创建5000个空单元格会有任何内存问题,即使我显示50行数据吗?
答案 0 :(得分:1)
iPhone内存有限,因此您应始终小心,只显示该视图所需的数据。您可以实现无限滚动,当您通过滚动到达屏幕底部触发事件并加载下一个25-50记录。
http://nsscreencast.com/episodes/8-automatic-uitableview-paging
答案 1 :(得分:1)
使用canonical way of handling tables快速学习的一件事是,无论模型的大小(即您打算创建的行数),实际上只创建了少量行,因此内存占用率仍然很低。
本质上,UITableView最初会创建并呈现一系列行(另外还有一些行可用于测量)。当您开始向下滚动时,控制器会识别出它需要绘制一个新行。但是,它也意识到表顶部的行已从视图中消失。因此,不是创建一个全新的单元格,而是只需要查看其中一个单元格,并使用新信息重新配置它。无论你的桌子有多少行,只有少数细胞存在于记忆中。
因此,在您的情况下,内存瓶颈很可能是为单元配置提供支持的模型。如果您一次将所有5000行加载到内存中,那么这可能会很慢并且占用内存。但是手头有帮助:你从表控制器得到一个暗示,它基本上告诉你它要设置第* n行。因此,您的模型实际上可以更有针对性,只加载您需要的数据。例如,既然您知道正在渲染第15行,那么请从数据库中获取第15行,而不是预先预加载整个模型。
这是我用来创建超过5000行的应用程序而无需分页的方法。当然,这取决于您的数据集,了解用户可以如何导航。
答案 2 :(得分:1)
如果您正确地构建了表,那么您将只使用少数几个实际的UITableViewCell对象,这些对象会随着屏幕上显示的内容而不断回收。
即使是50也是安全的。
在内存中有50个UITableViewCells的5000个数据对象应该是可以接受的。
特别是如果这些数据对象很小,或者您允许CoreData为您管理数据集做一些工作。
重要的是不要制作5000个表格视图。这是非常糟糕的做法。