0

我有以下代码的内存泄漏。其中 self.firstURLConn 是 @property(非原子,保留)。

NSMutableURLRequest* req = [[NSMutableURLRequest alloc] initWithURL:urlcachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60.0f];

self.firstURLConn = [[[NSURLConnection alloc] initWithRequest:req delegate:self] autorelease];

[req release];//memory leak here and with self.firstURLConn

为什么内存在这里泄漏

4

3 回答 3

1

您是否曾经运行过产品 > 分析?如果您这样做了,请向我们展示内存泄漏问题日志。

他们不仅会告诉您有内存泄漏问题的代码行,还会显示导致问题的代码步骤。

我建议您使用带有泄漏工具的仪器工具。它将显示有关您的代码问题的深入信息。

编辑: req 变量错过自动释放。因为req已经保留了2次。像这样更改代码

NSMutableURLRequest* req = [[[NSMutableURLRequest alloc] initWithURL:urlcachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60.0f] autorelease];

self.firstURLConn = [[[NSURLConnection alloc] initWithRequest:req delegate:self] autorelease];

[req release];//memory leak here and with self.firstURLConn

因为您firstURLConn已在保留属性中声明。所以,dealloc方法,你应该设置nil这个属性

- (void)dealloc
{
    self.firstURLConn = nil;
    [super dealloc];
}
于 2012-05-03T09:16:51.223 回答
0

由于委托方法异步返回(将来的某个时间),您必须在委托方法内部释放 NSURLConnection。删除自动释放并在完成和失败的委托方法中添加释放。

于 2012-05-03T17:23:31.737 回答
0

firstURLConn 会保留你的 req,req 只有在 firstURLConn 释放 req 时才会被释放。

于 2012-05-03T09:12:04.607 回答