stringByEvaluatingJavaScriptFromString导致UI冻结

时间:2015-02-19 10:47:15

标签: ios objective-c asynchronous uiwebview grand-central-dispatch

我使用stringByEvaluatingJavaScriptFromString调用JavaScript。我有UISlider和其他UI元素同时工作。当JavaScript调用发生时,我的整个UI都会冻结。我环顾四周,发现了这个 异步调用应解决问题。

我尝试了两种方法:

[webView performSelectorOnMainThread:@selector(stringByEvaluatingJavaScriptFromString:) withObject:func waitUntilDone:NO]

而且:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
            dispatch_async(queue, ^{
                [webView performSelectorOnMainThread:@selector(stringByEvaluatingJavaScriptFromString:) withObject:func waitUntilDone:NO];

        });

但这似乎都不起作用。我的UI仍然会冻结一秒钟,这是显而易见的。我错过了什么?

2 个答案:

答案 0 :(得分:0)

试试这个: -

dispatch_async(dispatch_get_main_queue(), ^{
   [webView stringByEvaluatingJavaScriptFromString:func];

}); 

答案 1 :(得分:0)

performSelectorOnMainThread:在主线程(UI的线程)上执行 我认为JavaScript中的错误,脚本无限执行。