Iphone 返回的NSString变量的内存管理

Iphone 返回的NSString变量的内存管理,iphone,memory,nsstring,Iphone,Memory,Nsstring,我为AppDelegate设置了一个变量集,用于存储在UIWebView中单击的当前URL。此变量在shouldStartLoadWithRequest函数中设置,如下所示: - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSString *va

我为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\u BAD\u访问错误,因为NSString已被销毁。但是,如果在分配变量时添加“retain”,如:

NSString *val = [[request.URL absoluteString] retain];
然后,这意味着每次查看页面时,都会保留一个新字符串,该字符串永远不会释放,从而导致内存泄漏。以后如何释放所有这些保留的字符串

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

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

我敢打赌这很简单。

假设currentURL保留属性,您应该执行以下操作:

NSString *val = [request.URL absoluteString];
[currentURL release];
currentURL = [val retain];
在你的梦中

[currentURL release];
或者,当您合成您保留的属性时,您只需在您的shouldStartLoadWithRequest中执行以下操作(当然仍然需要解除锁定):


如何在头文件中定义属性?在@interface中,我定义了:
NSString*currentURL
然后添加了属性:
@property(非原子,保留)NSString*currentURL@synthesis currentURL啊哈。。。。是的,行得通。我没有意识到使用
self.currentURL=
与只使用
currentURL=
不同,非常感谢!!=:)
self.currentURL = [request.URL absoluteString];
    - (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;
}