NSURLConnection * connection是类
的属性@property (nonatomic, retain) NSURLConnection *connection;
Instruments报告我在下面代码的第二行泄漏了一个NSURLConnection对象。
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:_url];
self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[request release];
在didFinishLoading
和didFinishWithError
委托选择器中,我将释放连接并设置为nil
[self.connection release];
self.connection = nil;
我已阅读"NSURLConnection leak?"帖子和其他几篇文章。我觉得我必须错过一些非常明显的东西。帮助
答案 0 :(得分:3)
正如roe的评论所说,你正在分配连接(保留计数1),然后再用你的连接属性保留它(保留计数2)。您只在委托选择器中释放一次。您有两种选择:
1)更改您的连接属性以分配而不是保留。
@property (nonatomic, assign) NSURLConnection *connection;
// OR, since assign is the default you may omit it
@property (nonatomic) NSURLConnection *connection;
2)在连接属性保留分配的对象后释放它:
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:_url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
self.connection = connection;
[connection release];
[request release];
选项2是首选,因为泄漏的可能性较小,因为分配和释放尽可能接近。此外,如果您忘记释放先前的连接,则合成方法将为您释放前一个连接。不要忘记在dealloc中释放self.connection。