我正在使用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来完成的。
这将被释放并立即解除分配,因为alloc / init和release是平衡的。
所以,不,这不是你想要的。
请提供更多关于connection
的代码。你在做什么呢
您很可能希望将其写入属性并以dealloc格式发布。
请确保您了解Management Rules。这很重要。
如果你(显然)没有使用ARC,你有两个选择:
a)在适当时保留对连接和释放的引用
b)你也可以在委托方法中释放连接 - 如果你这样做,分析器会给你警告
第一个选项通常更容易维护,特别是如果您在一个对象中使用多个连接。
如果这是一个新项目,请考虑使用ARC(如Richard J. Ross III所述)。