我是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];
答案 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
我希望它可以澄清你的一些问题。