0

我有一个基于一些传入变量构建请求的类。该类还具有接收数据并将其存储在属性中以供调用类检索的所有委托方法。

当类初始化时,它会创建一个连接,然后返回自身:

NSURLConnection *connection;
if (self = [super init]) {
    self.delegate = theDelegate;
    ...some code here...
    connection = [[NSURLConnection alloc] initWithRequest:theRequest  delegate:self  startImmediately:YES];
}
return self;

所以我不能正常释放它,如果我自动释放它会崩溃。释放是调用类的工作吗?如果是这样,只是释放初始化的对象也会释放连接还是你必须专门释放它?如果是这样,你会怎么做?

谢谢

4

3 回答 3

3

connection创建一个实例变量并按需释放它。“谁”应该释放对象的问题严格取决于您的对象语义和层次结构。

于 2010-03-15T00:08:38.427 回答
0

为什么要NSURLConnection在构造函数中打开一个?

通常,您的构造函数不应执行此类工作。如果连接与对象相关联,我会在对象的方法中创建对象的connection属性。[connection release];dealloc

于 2010-03-15T00:08:16.890 回答
0

请记住,您不应该完全相信 Clang。它可以并且确实报告假阴性和假阳性。

Clang 每天都在变得更好,但它现在仍处于起步阶段。它与 Xcode 如此完美地集成真是太好了,但请记住它确实存在一些缺陷。

在这种情况下,它取决于您存储连接对象的变量的范围。如果它被声明为实例变量,那么它应该没问题,只要您在 dealloc 中或在您释放它时的其他时间点'完成它。

如果,就像您在问题中发布的那样,声明connection是您的 init 方法的本地声明,那么 Clang 正确地报告了泄漏。您应该创建connection一个实例变量或属性,并确保在 dealloc 或完成后释放它。

于 2010-03-15T00:10:11.463 回答