通常我写dealloc看起来像这样:
- (void)dealloc {
[coffeeList release];
[super dealloc];
}
但是今天我输入了(见下文)并且有点疑惑为什么我通过CLANG静态分析器运行代码时出错了。正如我所说,我通常不会在dealloc中为iVars添加自我,但是当我发现它发生了什么时,我只是有点好奇。
- (void)dealloc {
[[self coffeeList] release];
[super dealloc];
}
加里。
答案 0 :(得分:4)
我只是猜测clang通知[self something] release
(或[self.something release]
)违背了内存管理约定。从名称中没有“new”,“init”或“copy”的方法返回的对象应该自动释放,因此再次释放它似乎是一个过度释放错误。
答案 1 :(得分:1)
因为那是非常糟糕的形式,并且违背了你应该做的事情。 CSA不仅检查语义错误,还检查您是否按照应有的方式做事。你应该在哪里,就是在文档中完成工作的方式。
答案 2 :(得分:0)
将coffeeList声明为属性(并设置为retain)?那么你应该这样做:
[self.coffeeList release];