1

我为我的 AppDelegate 设置了一个变量,它存储在 UIWebView 中单击的当前 URL。该变量在 shouldStartLoadWithRequest 函数中设置,如下:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    NSString *val = [request.URL absoluteString];

    currentURL = val;
    return YES;
}

问题是稍后在应用程序中,访问 currentURL 会导致 EXC_BAD_ACCESS 错误,因为 NSString 已被销毁。但是,如果我在分配变量时添加“保留”,例如:

NSString *val = [[request.URL absoluteString] retain];

那么这意味着每次查看页面时,都会保留一个永远不会释放的新字符串,从而导致内存泄漏。我以后如何释放所有这些保留的字符串?

我正在存储此值,以便在加载页面出现问题时重新加载页面。

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    [ausWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:currentURL]]]
}

我敢打赌这很简单。

4

2 回答 2

0

假设 currentURL 保留属性,您应该这样做:

NSString *val = [request.URL absoluteString];
[currentURL release];
currentURL = [val retain];

在你的交易中

[currentURL release];

或者当你合成你保留的属性时,你只需要在你的 shouldStartLoadWithRequest 中做(当然仍然需要释放):

self.currentURL = [request.URL absoluteString];
于 2012-06-12T06:24:30.320 回答
0
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{

        NSString *val = [request.URL absoluteString];
        if(currentURL)
        {
            [currentURL release];
            currentURL = nil;
        }
        currentURL = [[NSString alloc] initWithString:val];
        return YES;
}
于 2012-06-12T06:24:49.430 回答