1

今天我遇到了一个小问题,我想知道泄漏的原因。这是代码

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

这工作正常没问题。

现在我只是想知道这个分配的内存/对象会发生什么,因为没有人释放它。因此,根据本能,我在像这样分配时放置了自动释放:

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

这给了我一个错误并崩溃“[NSURLConnectionInternalConnection _withConnectionDisconnectFromConnection]:发送到已释放实例的消息”

只是想知道背后的概念和原因。

编辑:我没有使用 ARC。

谢谢。

4

3 回答 3

1

我认为你不能在这里使用自动释放来更好地管理内存请在连接委托方法中释放连接对象

 - (void)connectionDidFinishLoading:(NSURLConnection *)connection;
 {
     [connection release];
 }

因此,当您的连接完成时,它将释放连接对象,或者您也可以在 viewDidUnload 中释放它

于 2012-07-24T07:03:08.237 回答
0

[NSURLConnectionInternalConnection _withConnectionDisconnectFromConnection]

这是在自动释放池释放您的 NSURLConnection 连接对象后调用的。最好的方法应该是,在完成获取数据后,对变量进行引用并释放它。(可能在 viewDidUnload: 中)

于 2012-07-24T06:59:16.583 回答
0

您可以使用此方法进行更好的内存管理 NSURLConnection *connection=[NSURLConnection connectionWithRequest:urlRequest delegate:self];

上面的connectionWithRequest方法是类方法,它自己管理内存,你不需要释放它。据我所知,在分配连接对象 objc 运行时将对象添加到自动释放池,然后将其他委托方法发送到已释放的实例。

于 2012-07-24T07:02:20.337 回答