所有UIWebView共享一个网络线程。
当其中一个是init
- ed,从superview等中删除时,它们将尝试以阻塞方式从主线程锁定Web线程,从而暂时冻结主线程的运行循环。
如果网络线程繁忙,例如在执行长同步XMLHttpRequest
时,这可能会长时间阻塞主线程。
有没有办法避免这种情况?
如果我可以修改UIWebView,我只是让锁定尝试不阻塞,但显然情况并非如此,所以我正在寻找其他聪明的想法。
答案 0 :(得分:6)
它的长短是:避免做任何阻塞网络线程很长时间的事情(window.alert
,window.prompt
,XMLHttpRequest.open('GET', url, false)
,可能还有其他事情)
此外,避免调用锁定Web线程的方法,然后立即执行需要很长时间的操作,因为一旦控件返回到运行循环,Web线程才会被解锁。 (示例:调用-[UITextView setText:]
然后在主线程上同步读取文件)
答案 1 :(得分:0)
您无法进行同步xhr,因为这会导致跨域政策错误。