我刚刚在项目中运行了clang静态分析器,我收到以下警告:
Incorrect decrement of the reference count of an object that is not owned at this point by the caller
请告诉我我的问题是什么。我通常能够很好地管理我的应用程序中使用的内存。
self.cupboardViewController = [[CupboardViewController alloc] initWithNibName:@"CupboardViewController" bundle:[NSBundle mainBundle]];
[self.window addSubview:self.cupboardViewController.view];
- (void)dealloc {
[[self cupboardViewController] release];//where I am getting the warning.
[super dealloc];
}
答案 0 :(得分:3)
非常确定你应该释放实例变量,而不是属性。
- (void)dealloc {
[cupboardViewController release];
[super dealloc];
}
答案 1 :(得分:0)
如果您将cupboardViewController
作为保留属性,则在上面的代码中设置self.cupboardViewController =
会将保留计数设为2。
问题是它被过度保留了,所以当你在dealloc中释放它时,仍有一个未完成的保留,因此它会泄漏。
我使用的代码标准很简单:
theProperty = [[NS* alloc] init]
当我分配我的属性(创建一个保留)时,只需:
[theProperty release];
在我的dealloc
方法中。
这种方式我是一致的,因为我没有引用该属性,只引用了iVar并且在保留和释放过度或不足的情况下回避了这些问题。