我有一个基于一些传入变量构建请求的类。该类还具有接收数据的所有委托方法,并将其存储在属性中以供调用类检索。
当类初始化时,它会创建一个连接,然后返回自己:
NSURLConnection *connection;
if (self = [super init]) {
self.delegate = theDelegate;
...some code here...
connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately:YES];
}
return self;
所以我无法正常释放它,如果我自动释放它崩溃了。是否需要释放调用类的工作?如果是这样,只是释放初始化对象也释放连接或者您是否必须专门发布它?如果是这样,你会怎么样?
由于
答案 0 :(得分:3)
使connection
成为实例变量并按需释放它。 “谁”应该释放对象的问题严格依赖于对象的语义和层次结构。
答案 1 :(得分:0)
为什么要在构造函数中打开NSURLConnection
?
通常,构造函数不应执行此类工作。如果连接与对象关联,我会在对象的connection
方法中将[connection release];
作为对象的属性和dealloc
。
答案 2 :(得分:0)
请记住,你不应该完全信任Clang。它可以而且确实报告假阴性和误报。
Clang每天都在好转,但现在还处于起步阶段。它非常好地与Xcode集成,但请记住它确实存在一些缺陷。
在这种情况下,它取决于您存储连接对象的变量的范围。如果它被声明为实例变量,那么它应该没问题,只要你在dealloc或其他一些中释放它当你完成它时,请指出。
如果您在问题中发布了connection
的声明是您的init方法的本地声明,那么Clang正确地报告了泄漏。您应该使connection
成为实例变量或属性,并确保以dealloc或完成后释放它。