0

我正在使用LRResty和NSXMLRequest来显示来自API的搜索结果。这里是我的代码如下所示:是否更快地解析主线程上的XML?为什么?

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 
[[LRResty client] get:searchEndpointURL withBlock:^(LRRestyResponse *response) { 

    //NSLog(@"Results:\n\n\n%@", [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] 
}]; 

出于某种原因,我的搜索显示控制器更新更快,当我分析阻塞主线程比没有。

性能下降是否与解析器没有在主线程上运行有关?怎么会这样?

回答

2

主线程的性能会比较慢,因为应用程序还有更多工作要完成。创建线程本身会产生一些开销,然后处理时间必须在忙于处理UI事件和绘制UIViews的主线程与执行解析的后台线程之间共享。如果您在主线程上解析,则会阻止该应用程序对UI执行任何操作,因此它的执行次数会减少,并且会尽快完成。但是你没有获得UI更新,所以显然这是不好的。