我刚刚注意到 webViewDidFinishLoad 方法阻塞了整个应用程序,所以我什至不能触摸任何按钮。
我需要解析 UIWebView 的结果页面,这可能需要很多时间。那么在不阻塞整个应用程序的情况下解析它的最佳方法是什么?也许创建另一个线程?
我刚刚注意到 webViewDidFinishLoad 方法阻塞了整个应用程序,所以我什至不能触摸任何按钮。
我需要解析 UIWebView 的结果页面,这可能需要很多时间。那么在不阻塞整个应用程序的情况下解析它的最佳方法是什么?也许创建另一个线程?
使用 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
});
});
}
-webViewDidFinishLoad
在主线程上调用是正常的。您需要做的是获取 html 并通过将其分派到另一个队列来执行解析操作。