目标C:代码中潜在的内存泄漏

时间:2011-06-08 03:19:37

标签: objective-c memory-leaks

我在代码上运行'Analyze',结果显示我的代码的下一部分可能存在内存泄漏

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];

//Potential memory leak in code below
[[NSURLConnection alloc] initWithRequest:request delegate:self];

我不知道如何阻止这种泄漏。我试图在后面添加一个'autorelease',但这会导致崩溃。对此有何建议?

编辑:

泄漏消息的屏幕截图

enter image description here

3 个答案:

答案 0 :(得分:4)

成功或失败时释放连接对象。它需要保持活力直到那时。因此,在connection:didFailWithError:connectionDidFinishLoading:委托方法中添加一个版本。只有一个会被召唤。因此,保留释放将平衡。

答案 1 :(得分:2)

您对NSURLConnection上的alloc的调用返回一个引用计数为1的对象。您的代码应如下所示:

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start]; // This is optional.  It should begin the request after you alloc it

完成对象后,需要显式调用:

[connection release];

答案 2 :(得分:1)

使用静态方法

[NSURLConnection connectionWithRequest:request delegate:self];

而不是

[[NSURLConnection alloc] initWithRequest:request delegate:self];

当然不需要在它的委托方法中释放连接对象。

或者,如果您使用第二种方法,请在两种委托方法中释放NSURLConnection对象:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

并且可以忽略内存泄漏警告消息。