我在代码上运行'Analyze',结果显示我的代码的下一部分可能存在内存泄漏
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
//Potential memory leak in code below
[[NSURLConnection alloc] initWithRequest:request delegate:self];
我不知道如何阻止这种泄漏。我试图在后面添加一个'autorelease',但这会导致崩溃。对此有何建议?
编辑:
泄漏消息的屏幕截图
答案 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
并且可以忽略内存泄漏警告消息。