我的内存泄漏代码如下。 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
为什么内存泄漏
答案 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。删除自动释放并在已完成和失败的委托方法中添加一个版本。