分配对象和释放ios的问题

时间:2012-05-03 09:07:50

标签: ios memory-leaks

我的内存泄漏代码如下。 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

为什么内存泄漏

3 个答案:

答案 0 :(得分:1)

你有没有运行过Product>分析呢?如果你这样做,请告诉我们内存泄漏问题日志。

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

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

编辑: req变量miss autorelease。因为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];
}

答案 1 :(得分:0)

firstURLConn将保留您的req,req将仅在firstURLConn将释放req时解除分配。

答案 2 :(得分:0)

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