【发布时间】:2012-08-02 12:48:48
【问题描述】:
我遇到了一个困扰我好几天的问题。
我正在使用 NSXMLParser 解析 RSS 提要,并将结果输入 UITableView。不幸的是,提要返回了一些我用以下方法解析出来的 HTML:
- (NSString *)flattenHTML:(NSString *)html {
NSScanner *theScanner;
NSString *text = nil;
theScanner = [NSScanner scannerWithString:html];
while ([theScanner isAtEnd] == NO) {
[theScanner scanUpToString:@"<" intoString:NULL] ;
[theScanner scanUpToString:@">" intoString:&text] ;
html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>", text] withString:@""];
}
html = [html stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
return html;
}
我目前在 NSXMLParser 委托方法期间调用此方法:
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
这很好用,但是解析 HTML 并将其展平为文本并填充单元格需要将近一分钟或更长时间。在那无休止的一分钟内,我的 UITableView 完全是空的,只有一个旋转的微调器。这不好。这是在我发布这个原本可以很好工作的应用程序之前消除的最后一个“错误”。
它在 iOS 模拟器上运行得非常快,这不足为奇。
提前感谢您的任何建议。
【问题讨论】:
-
您确定扫描仪是瓶颈吗?你测量过(使用仪器)吗?听起来好像实际的数据传输也可能是一个问题。
-
您正在处理的数据有多大?任何低于兆字节的东西都应该移动得很快。比这更大,你会看到
NSXMLParser开始挣扎。 -
对于完全留在记忆中的东西来说,一分钟慢得令人难以置信。添加
NSLog以了解那一分钟有多少时间用于通过网络接收数据,或者您重复执行某项操作的次数超过了您必须执行的次数。 -
@Till,数据传输不是瓶颈。如果我注释掉格式化步骤,UITableView 会在一秒钟左右加载。
标签: objective-c ios uitableview nsxmlparser