CSA警告:调用者此时不拥有的对象的引用计数的不正确递减

时间:2011-05-14 18:43:28

标签: iphone objective-c cocoa-touch memory-management

我刚刚在项目中运行了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];
}

2 个答案:

答案 0 :(得分:3)

非常确定你应该释放实例变量,而不是属性。

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

答案 1 :(得分:0)

如果您将cupboardViewController作为保留属性,则在上面的代码中设置self.cupboardViewController =会将保留计数设为2。

问题是它被过度保留了,所以当你在dealloc中释放它时,仍有一个未完成的保留,因此它会泄漏。

我使用的代码标准很简单:

theProperty = [[NS* alloc] init]

当我分配我的属性(创建一个保留)时,只需:

[theProperty release];

在我的dealloc方法中。

这种方式我是一致的,因为我没有引用该属性,只引用了iVar并且在保留和释放过度或不足的情况下回避了这些问题。