我使用LRResty和NSXMLRequest来显示API的搜索结果。以下是我的代码:
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
[[LRResty client] get:searchEndpointURL withBlock:^(LRRestyResponse *response) {
//NSLog(@"Results:nnn%@", [response asString]);
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:[response responseData]];
parser.delegate = self;
//TODO: Why does this work faster than running in the background?
[parser parse];
//[parser performSelectorInBackground:@selector(parse) withObject:nil]
}];
出于某种原因,当我解析阻塞主线程时,我的搜索显示控制器的更新速度比没有阻塞主线程更快。
较慢的性能是否与解析器没有在主线程上运行有关?为什么呢
主线程的性能会变慢,因为应用程序还有更多的工作要做。创建线程本身会产生一些开销,然后处理时间必须在忙于处理UI事件和绘制UIViews的主线程和进行解析的后台线程之间共享。如果你在主线程上进行解析,你会阻止应用程序对UI进行任何操作,所以它需要做的事情更少,而且会更快完成。但是你没有得到任何UI更新,所以显然这是不好的。