webViewDidFinishLoad阻止主线程

时间:2013-05-13 11:06:03

标签: ios objective-c

我刚注意到webViewDidFinishLoad方法阻止了整个应用程序,因此我甚至无法触摸任何按钮。

我需要解析UIWebView的结果页面,这可能需要花费很多时间。那么在不阻塞整个应用程序的情况下解析它的最佳方法是什么?也许创造另一个线程?

2 个答案:

答案 0 :(得分:3)

使用GCD在后台解析它:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    // Get the contents from the UIWebView (in the main thread)
    NSString *data = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.textContent"];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // Parse the data here

        dispatch_sync(dispatch_get_main_queue(), ^{

            // Update the UI here

        });
    });
}

答案 1 :(得分:0)

在主线程上调用是正常的-webViewDidFinishLoad。您需要做的是获取html并通过将其分派到另一个队列来执行解析操作。