Nsstring* body = <some HTML>;Nsstring* HTML = [Nsstring stringWithFormat:kHTMLTemplate,[self scripts],[self styles],body];[_webVIEw loadHTMLString:HTML baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];
每次有新内容可用时,我再次执行loadHTMLString刷新网页视图.我重复使用相同的Web视图,相同的控制器,一切都一样.
仪器显示了一个非常奇怪的模式,其中所有泄露的对象都是各种大小的通用块,并且没有任何信息附加到它:没有负责任的库,没有负责任的框架等.每次执行loadHTMLString时,都会添加新的泄漏.
似乎在S.O.中有几个线程.关于UIWebVIEw泄漏内存.我已经尝试了我发现的所有建议(例如,将NSURLCache设置为零或重置它;我尝试发布现有的UIWebVIEw并且每当我有新的数据等分配一个新的),但没有任何帮助.
到目前为止,我的调查得出了一个明确的结果:似乎只有当我加载到视图中的HTML包含一些JavaScript时才会出现泄漏.如果您注意到上面的HTML字符串,它由几个组件组成;一个是[自己的脚本],这是一个简单地返回的函数:
return @"<script type='text/JavaScript' src='jquery-1.4.4.min.Js'></script>" "<script type='text/JavaScript' src='jmy.Js'></script>";
如果我删除这个,没有泄漏.但是,一旦添加< script>,就会出现泄漏.标记到我的HTML.他们甚至出现如果我只是包括jquery文件(或任何其他Js文件,对此):
return @"<script type='text/JavaScript' src='jquery-1.4.4.min.Js'></script>";
所以,问题是:有谁知道这里发生了什么吗?清楚地包含一个JavaScript文件到我的HTML是使UIWebVIEw泄漏内存.
当我重复使用相同的UIWebVIEw对象时,或者每当我有内容实例化一个新的漏洞时,会出现泄漏的事实,导致我认为必须有一些JavaScript文件被loadHTMLString处理,导致泄漏.
有人知道如何解决这个问题吗?
解决方法 我终于找到了一些关于发生的事情的线索,最重要的是我想分享的解决方法.我可以确认,简单的包含一些JavaScript文件是在重新加载Web视图时引起内存泄漏.我甚至尝试使用HTML内容构建文件,然后通过loadRequest将其加载到UIWebVIEw中,并通过重新加载重新加载;泄漏总是在那里.我会为此发布一个雷达.
救了我的是使用INNERHTML来更新网页视图的内容.而不是依赖于重新加载或加载HTMLString,我用一个空的身体初始化了我的Web视图(我的意思是,头部包括所有必需的Js / CSS文件),然后更新它设置document.body.INNERHTML:
body = [body stringByReplacingOccurrencesOfString:@"\"" withString:@"\\""];[webVIEw stringByEvaluatingJavaScriptFromString:[Nsstring stringWithFormat:@"setbody(\"%@\");",body]];
与setbody定义如下:
var setbody = function(body) { document.body.INNERHTML = body;}
我获得了两个好处:网页视图更新变得非常快(这是不能更新DOM的一个效果,另一方面整体上并不是完全可取的),而且没有内存泄漏在“仪器”下运行.缺点是我不得不微调几个条件,应用程序运行正常;特别:
>加载Web视图(即使是空的body页面)也需要很多,所以当DOM准备好的时候,你必须同步其内容的第一次更新;
> webVIEwDIDFinishLoading似乎不可靠:它在document.readyState完成之前执行;
> document.documentElement.height,检索页面高度的正式方法似乎不可靠:解决方法是获取正文部分的“计算样式”,并读取其高度值.
希望这可以帮助有人发现他的网页浏览漏洞.
总结以上是内存溢出为你收集整理的ios – 内存泄漏与UIWebView和Javascript全部内容,希望文章能够帮你解决ios – 内存泄漏与UIWebView和Javascript所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)