2011-05-14 44 views
1

我只是跑在我的项目铛静态分析器在这一点上拥有的对象的引用计数错误减量,和我收到以下警告:CSA警告:不是由主叫方

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

假设'cupboardViewController'标记为'retain',无论如何你都会泄漏它,因为它会自动保留你在示例第一行创建的新对象。您应该在将其分配给属性之前自动释放该对象,àla'self.cupboardViewController = [[[CupboardViewController alloc] init ...] autorelease];'。 – 2011-05-14 18:56:22

+0

我这样做了,但它导致应用程序在一段时间后崩溃。 – 2011-05-14 19:11:22

回答

3

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

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

如果你有cupboardViewController为留置物然后在上面的代码中设置self.cupboardViewController =创造的2

一个保留计数的问题是其对保留的,所以当你释放它的dealloc中仍存在一个杰出的保留,因此它泄漏。

我用的代码标准很简单:

theProperty = [[NS* alloc] init]

当我的Alloc我的财产(创建一个单一的保留),那么就:

[theProperty release];

在我dealloc方法。

这种方式我一致认为,我没有引用财产,只有iVar和回避这些问题与保留和释放。