所有UIWebView共享一个Web线程.
当其中一个init
被从超级视图等中删除时,它们将尝试以阻塞方式从主线程锁定Web线程,从而暂时冻结主线程的运行循环.
如果Web线程忙,例如在执行长同步时XMLHttpRequest
,这可能会长时间阻塞主线程.
有办法避免这种情况吗?
如果我可以修改UIWebView,我只是让锁定尝试不阻塞,但显然情况并非如此,所以我正在寻找其他聪明的想法.
长期和短期的是:避免做任何阻止网络线程的时间显著量(window.alert
,window.prompt
,XMLHttpRequest.open('GET', url, false)
,可能还有其他人)
此外,避免调用锁定Web线程的方法,然后立即执行需要很长时间的操作,因为一旦控件返回到运行循环,Web线程才会被解锁.(示例:调用-[UITextView setText:]
然后在主线程上同步读取文件)