在"reloadData()"之后,Table View需要花费大量时间进行刷新

Ami*_*itK 5 iphone rss xcode uitableview

这就是我想要做的事情:从苹果公司的RSS获取一个xml,其中包含有关应用程序的信息,解析它,并在UITable视图中显示应用程序.

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

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

Bog*_*tyr 20

在表格中显示缓慢加载(即基于网络)数据的公认惯用法是,如果表格中尚未存在数据,则在单元格中显示活动指示符,然后在后台下载数据(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];
Run Code Online (Sandbox Code Playgroud)

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