1

我正在关注 Apple 官方示例

http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

在使用 Instruments 检查我的代码时,我发现了一个由未发布的 NSURLRequest 引起的泄漏。我现在已经包括了[request release]不久之后

NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self];     

它似乎工作。我对吗?

问候

4

2 回答 2

2

该请求是自动释放的,这意味着自动释放池应该负责释放它。如果你在 Cocoa 应用程序中使用它,你应该自动设置一个自动释放池来处理自动释放对象的释放。

如果您正在开发非可可应用程序,则必须自己设置并确保释放/排空池以释放对象。

通常你只需要释放用alloc,或者如果你发送了它创建copy的对象。这意味着您必须释放您创建的连接对象,否则会导致泄漏。mutableCopyretain[[NSURLConnection alloc] init...

这是有关自动释放池的文档的链接

于 2009-11-26T22:54:31.323 回答
0

啊,我明白了。由于某些原因,我将“官方”示例与我自己的实现混合在一起:) 在我的代码中,我正在这样做:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL: url];

这当然必须被释放。我上面提到的示例表现不同。昨晚好像有点晚了。

但是,非常感谢您的回答。

有一件事让我发疯:我没有收到电子邮件通知,如果有人回答我的问题,尽管我已经设置了标记......

问候

于 2009-11-27T21:27:16.077 回答