在dealloc中使用iVars上的self?

时间:2010-10-28 15:29:55

标签: iphone objective-c cocoa-touch

通常我写dealloc看起来像这样:

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

但是今天我输入了(见下文)并且有点疑惑为什么我通过CLANG静态分析器运行代码时出错了。正如我所说,我通常不会在dealloc中为iVars添加自我,但是当我发现它发生了什么时,我只是有点好奇。

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

加里。

3 个答案:

答案 0 :(得分:4)

我只是猜测clang通知[self something] release(或[self.something release])违背了内存管理约定。从名称中没有“new”,“init”或“copy”的方法返回的对象应该自动释放,因此再次释放它似乎是一个过度释放错误。

答案 1 :(得分:1)

因为那是非常糟糕的形式,并且违背了你应该做的事情。 CSA不仅检查语义错误,还检查您是否按照应有的方式做事。你应该在哪里,就是在文档中完成工作的方式。

答案 2 :(得分:0)

将coffeeList声明为属性(并设置为retain)?那么你应该这样做:

[self.coffeeList release];