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更新,所以顯然這是不好的。