如何以更快的方式将xml加载到内存中?

时间:2011-11-22 12:55:24

标签: iphone objective-c parsing

我是Objective-c的新手。我将整个xml字符串从服务器加载到nsxml解析器,如下所示:但问题是从url到内存的编码比解析它需要更多的时间。我该怎么解决? (我的应用很慢)

xmlString = [[NSMutableString alloc] initWithContentsOfURL:url usedEncoding:&NSUTF8StringEncoding error:&error];
NSData *xmlData = [xmlString dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];

4 个答案:

答案 0 :(得分:0)

在不同的线程中运行XML Parser。(这不会使您的解析速度更快)
How To Choose The Best XML Parser for Your iPhone Project

答案 1 :(得分:0)

基本上NSXMLParser很慢。有可能为特定需求找到更好的解析器。如果您不需要整个DOM和验证,真正的流解析器可能会有所帮助。

答案 2 :(得分:0)

不要使用

 xmlString = [[NSMutableString alloc] initWithContentsOfURL:url usedEncoding:&NSUTF8StringEncoding error:&error];

使用ASIHTTPRequest之类的网络库从URL加载内容,然后解析它。

直接从网址加载就会挂起您的应用,直到数据加载完毕。

按说明书中的说明下载并安装该库(很容易),然后就可以了

{
   //in some function
   NSURL *url = [NSURL URLWithString:urlString];
   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setDelegate:self];
   [request startAsynchronous]; //this will load URL in background
}

- (void)requestFinished:(ASIHTTPRequest *)request
{
   // Use when fetching text data
   NSString *responseString = [request responseString];

   //parse the XML here
   [self parseXML:responseString];
}

- (void)requestFailed:(ASIHTTPRequest *)request
{
   NSError *error = [request error];
}

答案 3 :(得分:0)

您无法更快地从网址加载xml,因为它完全取决于您的互联网连接。

为了使您的应用程序保持流畅,您需要在另一个线程中解析xml。我在下面的网址中回答了类似的问题

How to handle freezing programm at loading xml from bad url?

还有比默认NSXMLParser更快的XML解析器。在以下博客文章中有关于它们的很好的介绍。因此,您可以使用任何这些解析器代替NSXMLParser来提高应用程序的性能。

http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project

我希望它可以澄清你的一些问题。