iPhone应用程序内存相关查询

iPhone应用程序内存相关查询,iphone,uitableview,Iphone,Uitableview,我正在构建一个iPhone应用程序。在数据库中我有5000条记录。其中我在应用程序中只显示了50个。但我想问的是,如果我最初在iPhone视图中创建5000个空单元格,即使我正在显示50行数据,是否会出现内存问题?iPhone的内存有限,因此您应该始终注意仅显示该视图所需的数据。您可以实现无限滚动,当您通过滚动到达屏幕底部时,触发一个事件并加载下一个25-50条记录 iPhone的内存有限,因此您应始终注意仅显示该视图所需的数据。您可以实现无限滚动,当您通过滚动到达屏幕底部时,触发一个事件并加载

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

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


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


您将很快了解到的一件事是,无论您的模型大小(即您打算创建的行数),实际上只创建了少数行,因此内存占用仍然很低

本质上,UITableView最初创建并呈现一个屏幕上的行(再加上一些行)。当您开始向下滚动时,控制器会识别出它需要绘制新行。但是,它也意识到,表格顶部的行已从视图中消失。所以,它不是创建一个全新的单元,而是简单地选取其中一个不再可见的单元,并用新信息重新配置它。不管您的表有多少行,内存中只有这几个单元格

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


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

您将很快了解到的一件事是,无论您的模型大小(即,您打算创建的行数),实际上只创建了少数行,因此内存占用仍然很低

本质上,UITableView最初创建并呈现一个屏幕上的行(再加上一些行)。当您开始向下滚动时,控制器会识别出它需要绘制新行。但是,它也意识到,表格顶部的行已从视图中消失。所以,它不是创建一个全新的单元,而是简单地选取其中一个不再可见的单元,并用新信息重新配置它。不管您的表有多少行,内存中只有这几个单元格

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


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

如果您适当地构建了表,您将只使用一小部分到十几个实际的UITableViewCell对象,这些对象会随着屏幕上的显示不断循环使用

即使是50个也很安全

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

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


重要的是不要创建5000个表格单元格视图。这是一种极为糟糕的做法。

如果您适当地构建了表,那么您将只使用一小部分到十几个实际的UITableViewCell对象,这些对象会随着屏幕上显示的内容不断循环使用

即使是50个也很安全

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

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

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