从文件而不是URL加载时内存泄漏UIWebView? [英] Memory leak UIWebView when loading from file instead of URL?

查看:110
本文介绍了从文件而不是URL加载时内存泄漏UIWebView?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含UIWebView(OS 3.0)的UIViewController。如果我用文件数据加载它,一旦命中'后退按钮'并且视图被解除,我看到 EXEC_BAD_ACCESS
错误与WebCore对象发布'SharedBuffer'

I have a UIViewController that contains a UIWebView (OS 3.0). If I load it with file data, as soon as the 'Back Button' is hit and the view is dismissed, I'm seeing EXEC_BAD_ACCESS error with WebCore object releasing 'SharedBuffer'

- (void)viewDidLoad {
    NSString *htmlFile = [[NSBundle mainBundle] pathForResource:fileName ofType:@"html"];   
    NSData *fileHtmlData = [NSData dataWithContentsOfFile:htmlFile];
    [webView loadData:fileHtmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];      
}

如果我将上述内容更改为通过请求加载,一切都很好。

If I change the above to load via request, everything is fine.

NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];

在我的控制器的dealloc中,我使用以下内容发布webview:

In my controller's dealloc, I release webview with the following:

[webView setDelegate:nil];
[webView release];

堆栈跟踪如下:

#2  0x359d34ae in WebCore::SharedBuffer::~SharedBuffer
#3  0x358fdab8 in WebCore::DocumentLoader::~DocumentLoader
#4  0x332d3c00 in WebDocumentLoaderMac::~WebDocumentLoaderMac
#5  0x358fec8c in WebCore::FrameLoader::detachFromParent
#6  0x332d8830 in -[WebView(WebPrivate) _close]
#7  0x332d8757 in -[WebView close]
#8  0x332d86db in -[WebView dealloc]
#9  0x35890719 in WebCoreObjCDeallocOnWebThreadImpl
#10 0x358d29ce in HandleWebThreadReleaseSource

我还需要做些什么来防止泄漏/ bad_access错误吗?

Is there something else I need to do to prevent the leak/bad_access error?

推荐答案

原来你需要执行此处列出的步骤:

Turns out that you need to do the steps outlined here:

https ://devforums.apple.com/message/10741#10741

特别是J提出的建议im:

specifically the suggestion made by Jim:

- (void)webViewDidStartLoad:(UIWebView *)webView
{
    [webView.delegate retain];

    // logic ...
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{   
     // logic ...

    [webView.delegate release];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
     // error logic ...
    [webView.delegate release];
}

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    if (m_webView.loading)
    {
        [m_webView stopLoading];
    }

     // further logic ...
}

- (void)dealloc {
    m_webView.delegate = nil;
    [m_webView release];
   ...
    [super dealloc];
}

这篇关于从文件而不是URL加载时内存泄漏UIWebView?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆