iphone - TableView 在 "reloadData()"之后需要花费大量时间来刷新

标签 iphone xcode uitableview rss

这就是我想做的: 从苹果的 RSS 获取包含应用程序信息的 xml,对其进行解析,然后在 UITable View 中显示应用程序。

问题是,在“reloadData()”之后,大约需要 5 秒才能显示信息。 此外,应用程序在打开项目后第一次运行时总是崩溃。

这是项目: http://www.mediafire.com/?2dn6g916bh9uf4v

最佳答案

在表格中显示缓慢加载(即基于网络)数据的公认习惯用法是,如果数据尚未存在于表格中,则在单元格中显示事件指示器,然后在后台下载数据( NSOperationQueue 和 NSOperation 对此非常有用),并在数据准备好时发出通知。几乎可以肯定,这是您自己向表提供数据时的延迟(网络延迟和解析时间),而不是 UITabvleView 处理 reloadData 调用时的延迟。

编辑:更多信息,并解决延迟问题:

  • 代码从主线程外部调用 UI 例程(“[table reloadData]”)。这很糟糕,不要这样做。

  • 您试图将图像信息“推送”到 [self loadImages] 中的表中,而不是让表在 cellForRowAtIndexPath 中一次“拉取”一行信息。

编辑:好的,言归正传:我做了以下更改,所有延迟都消失了(根据 NSLog 时间戳,performSelectorOnMainThread 和 cellForRowAtIndexPath 之间大约有 2 毫秒)。

//[table reloadData];
NSLog( @"thread: calling reload" );
[table performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
//[self loadImages];

请注意,应用程序仍然不正确,图像尚未刷新。请记住:在后台下载图像,并向 View Controller 类发送新图像可用的通知,然后调用 [reload Table](当然是从主线程中运行的通知处理程序!)。不要从任何后台线程调用 UIKit 函数。这应该足以让您重组代码以做正确的事情。

关于iphone - TableView 在 "reloadData()"之后需要花费大量时间来刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5056183/

相关文章:

iphone - 从 ViewController 设置 UIImageView 图像

ios - (Swift) 'use of unresolved identifier ' FIRStorage'

ios - tableViewvisibleCells swift 上缺少单元格

ios - tableView reloadData 崩溃包括崩溃报告

javascript - 如何在 iOS uiautomation 中使用两个按钮处理警报

android - PhoneGap 是我的正确选择吗?

iphone - 限制 UITableView 的滚动

ios - 没有要编译的体系结构(ARCHS=i386,VALID_ARCHS=arm64 armv7 armv7s)

iphone - ASIFormDataRequest 适用于模拟器但不适用于设备?

ios - 从本地下载 url 图像和 uitableview 单元格图像并在 iOS 中并行执行。如何实现?