iphone dev - 异步加载表内容

时间:2010-05-18 18:31:55

标签: iphone multithreading uitableview asynchronous ipad

我的应用程序有一个导航控制器,可以推送和弹出一系列视图。其中一个tableViews从URL加载.xml文件,需要4-5秒。如果我单击导航栏上的后退按钮,它将仅在表格内容完成加载后作出响应。是否有一种简单的方法来异步加载内容,以便应用程序仍然可以响应我在导航栏上的手势? 附:我在互联网上搜索这个,人们正在谈论多线程。我对线程知之甚少,所以请更具体。

5 个答案:

答案 0 :(得分:1)

您应该异步重新加载远程数据。 Here您可以找到有关如何使用委托对象使用NSURLRequest加载数据的其他信息。在这种情况下,在完全加载文件(或发生超时/错误)之前,您的应用程序不会停留。

答案 1 :(得分:1)

Apple的XMLPerformance示例应用程序专门用于演示如何通过libxml2 SAX解析器(通过流)解析XML。使用流解析器对于快速,异步更新以及保持应用程序的内存配置文件较低非常有用。

如果将XML数据放入Core Data存储区,并将表视图连接到NSFetchedResultsController及其委托方法,则可以使用非常少的代码连续更新自己的表。核心数据和获取的结果控制器远远超出了本答案的范围,但您可以搜索Stack Overflow和Google以获取有关这些主题的更多信息。

为了简单起见,您可以将数据放入NSMutableArray并在阵列状态更改时重新加载表视图或特定的部分和行,但您必须自己管理表视图更新。 / p>

请注意,除数据模型外,处理视图可能会很快变得复杂;单击后退按钮将导致视图控制器被释放,以及任何相关属性,因此您需要小心管理从视图控制器取消XML的解析,并管理驻留在其中的数据模型的任何已分配内存。视图控制器。否则,一旦视图控制器完全释放,您将遇到内存泄漏或异常访问已发布的对象。

为了让您更轻松,您需要阅读NSOperationNSOperationQueue和KVO,这将帮助您跟踪操作状态并在视图控制器之前进行清理弹出。 NSOperation类使您可以轻松地在后台运行作业。还有其他手动方式来进行线程和锁定,但它们并不像NSOperation那样令人愉快和干净。

阅读Apple's NSOperation documentation将极大地帮助您,以及执行较小的测试应用程序,让您了解将应用程序提升到更高复杂程度所涉及的各种框架和类。

答案 2 :(得分:1)

查看Apple的LazyTableImages示例代码。它确实使用线程。另请查看this SO question的答案。

另一个SO answer provides code用于remoteImage类,我已经用它来运行它。

答案 3 :(得分:0)

您可能需要实施多线程解决方案。多线程应用程序的主题是 huge ,因此详细的答案会产生一本书,无论如何,其他地方可能更好地描述了这本书。

基础知识将涉及一个或多个“工作”线程,这些线程获取XML文件并在信息可用时向主线程报告。为iPhone / iPad实现这一点应该不会太困难,因为操作系统提供了许多线程原语,使开发人员可以更轻松地完成这项工作。

答案 4 :(得分:0)

您应该查看NSURLConnection

务必执行:

- (void)connectionDidFinishLoading: (NSURLConnection*)connection