当UIWebView试图阻止锁定Web线程时,避免主线程冻结

时间:2009-09-16 08:01:31

标签: iphone cocoa-touch uiwebview

所有UIWebView共享一个网络线程。

当其中一个是init - ed,从superview等中删除时,它们将尝试以阻塞方式从主线程锁定Web线程,从而暂时冻结主线程的运行循环。

如果网络线程繁忙,例如在执行长同步XMLHttpRequest时,这可能会长时间阻塞主线程。

有没有办法避免这种情况?

如果我可以修改UIWebView,我只是让锁定尝试不阻塞,但显然情况并非如此,所以我正在寻找其他聪明的想法。

2 个答案:

答案 0 :(得分:6)

它的长短是:避免做任何阻塞网络线程很长时间的事情(window.alertwindow.promptXMLHttpRequest.open('GET', url, false),可能还有其他事情)

此外,避免调用锁定Web线程的方法,然后立即执行需要很长时间的操作,因为一旦控件返回到运行循环,Web线程才会被解锁。 (示例:调用-[UITextView setText:]然后在主线程上同步读取文件)

答案 1 :(得分:0)

您无法进行同步xhr,因为这会导致跨域政策错误。