如何最有效地(内存和性能方面)加载具有大量记录的uitableview?

时间:2011-09-02 05:51:05

标签: ios performance uitableview memory-management

我们有一个网络服务iPhone应用程序,以10个记录的增量获取短文本(无图形) - 用户可以通过按“加载更多”按钮加载更多记录。 (类似于'默认'App Store'应用程序中的'加载25个')

目前,NSXMLParser用于解析XML,然后将记录存储在NSMutableArray中,并将新记录(来自“load more”)附加到数组中。

现在,我们遇到了两个问题,我们认为这些问题与我们当前将记录存储到RAM中的方法有关。这些是:

  1. 在内存不足的情况下,当我们从应用程序切换器切换回应用程序,然后在详细信息视图中按“后退”按钮时,应用程序会崩溃或重新加载表格视图!
  2. 加载了400条记录后,应用程序崩溃了!
  3. 要解决这些问题,只需将记录存储到SQLite(或核心数据)而不是数组中,就可以了吗?或者我们需要做更多/不同的事情?

    请指导!

    谢谢!

3 个答案:

答案 0 :(得分:0)

我能够显示超过12000条带有大小文字和记录的记录。每行中的图像。我怀疑你还有其他问题吗?

您是否描述过您的代码?试试Instruments。当你启动&从App切换器返回,您如何处理viewWillDisappearviewDidDisappear?切换视图时,您是dealloc还是release

答案 1 :(得分:0)

  1. 如果您不希望在发生内存警告时取消分配视图,则应覆盖视图控制器中的didReceiveMemoryWarning:。可能是因为这个原因。除此之外,您的viewDidLoad方法应该重新创建视图状态,以确保不会释放任何接口元素或nil
  2. 如果您一次性分配太多内存,iOS Watchdog服务将终止您的应用程序,因为它怀疑该应用程序将导致分配的内存量达到100%(之后会发生不好的事情)。如果您使用UITableView方法将额外记录添加到列表末尾(insertRowsAtIndexPaths:withRowAnimation:),也可能会在重度和/或重复使用情况下丢弃NSInconsistencyException。如果你的加载方法是异步的,那么它可能只是没有及时准备好或网络出现故障,并且你的数组的插入调用没有插入完整的行数,如果行数与您的数据源方法numberOfRowsInSection:不匹配,则strong> 会使应用崩溃。

答案 2 :(得分:0)

解决了......在阅读@ Steven的评论之后......我确信这不是内存问题......所以,我进一步深入研究,&发现了这个问题。

实际上,我在tableview中有一个deselectRowAtIndexPath方法。在低内存环境中,iPhone会释放存储在内存中的记录...因此,在这种情况下,deselectRowAtIndexPath指向什么都没有,这导致了崩溃......修改过的&现在解决了!

谢谢!