webView内存泄露

最近在写资讯详情页面,采用内嵌HTML页面时,多次进入详情页面后崩溃,用insturmemt检测也检测到内存泄露,发现是javascript代码导致内存泄露。

通常情况下,当你在UIWebView执行这个Javascript时,你将有一个大的内存使用和泄漏大量的数据, 同时,由于webView采用的是网页加载,从web的角度来讲,会存在缓存,参考文章http://www.sjsjw.com/kf_web/article/027020ABA031849.asp

<span style="font-size:14px;">function loadata()
        {
            
            totalheight = parseFloat($(window).height()) + parseFloat($(window).scrollTop());
            
            var kk={"ID":id,"isnotdeletealink":iol,"pageNum":pagenum,"type":"pageData","version":510};
            if ($(document).height() <= totalheight)
            {
                if(fact==true){
                    fact=false;
                    $.ajax({
                           type: 'POST',
                           url: "http://api.ios.d.cn/api-news/NewsInfoByJson.ashx",
                           data: kk,
                           dataType: 'html',
                           success: function (data) {
                           document.location='loadnextpage://';
                           fact=true;
                           $("div.body").append(data);
                           pagenum++;
                           set();
                           loading();
                           },
                           error: function (XMLHttpRequest, textStatus, errorThrown) {
                           alert(errorThrown);
                           }
                           });
                           
                }
            }
        }</span>
解决方法:

事实上,导致此泄漏的关键属性是的 WebKitCacheModelPreferenceKey。当你在一个UIWebView打开一个链接,这个属性被自动设置为“1”值 。因此,解决的办法是每当你打开一个链接时把它设回0:

<span style="font-size:14px;">- (void)webViewDidFinishLoad:(UIWebView *)webView{
    [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitDiskImageCacheEnabled"];//自己添加的,原文没有提到。
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitOfflineWebApplicationCacheEnabled"];//自己添加的,原文没有提到。
    [[NSUserDefaults standardUserDefaults] synchronize];
    
    if (IS_PHONE) {
        self.imageURLArray=[[[NSMutableArray alloc]initWithArray:[self getWebViewPictureUrlString]]autorelease];
        dispatch_queue_t queue=dispatch_queue_create("imagedownload", NULL);
        dispatch_async(queue, ^{
            [self asynRequestForImageArr:self.imageURLArray fromIndex:0];
        });
        dispatch_release(queue);
    }
    
}
</span>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值