我应该释放NSURLConnection实例变量吗?

时间:2012-02-04 22:34:28

标签: objective-c ios cocoa-touch

我正在使用NSURLConnection类通过互联网获取一些数据,我的应用程序在某些时候崩溃了,我得到一个错误表明我已经双重释放了一个对象,

这是我如何创建NSURLConnection的实例以及如何释放它:

NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
[connection release];

当我使用它时我应该释放它,对吗?还是在幕后发布?

编辑

现在我解决了这个问题,我简单地将NSURLConnection的实例作为ivar并以dealloc发布,这是代码

头文件:

// ....
NSURLConnection *connection;

@property (nonatomic, retain) NSURLConnection *connection;

实施档案:

// ...
NSURLRequest *request = [NSURLRequest requestWithURL:url];
self.connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
// ...

-(void)dealloc{ 
    [connection release];
    [super dealloc];
}

问题是我在分配新连接之前没有释放旧连接,这是通过在ivar之前添加self来完成的。

2 个答案:

答案 0 :(得分:1)

这将被释放并立即解除分配,因为alloc / init和release是平衡的。

所以,不,这不是你想要的。

请提供有关connection的更多代码。你在做什么呢。

您很可能希望将其写入属性并以dealloc发布。

请确保您了解Management Rules。这很重要。

答案 1 :(得分:0)

如果您(显然)没有使用ARC,您有两种选择:

a)在适当的时候保持对连接和释放的引用

b)你也可以在委托方法中释放连接 - 如果你这样做,分析器会给你警告

第一个选项通常更容易保留,特别是如果您在一个对象中使用多个连接。

如果这是一个新项目,请考虑使用ARC(如Richard J. Ross III所述)。