分配实例变量时,XCode静态分析器报告内存泄漏

时间:2011-11-02 18:29:08

标签: objective-c xcode memory-management

使用XCode 4.2,我在类似下面的代码上使用静态分析器:

@interface ArrayDimensions: NSObject
{
   ArrayIndex *dims;
}
-(id) init: (int *)dims_;
@end

@implementation ArrayDimensions

-(id) init: (int *)dims_
{
   self = [super init];
   if(self)
      dims = [[ArrayIndex alloc] make:dims_];
   return self;
}
@end

静态分析器报告“方法以+1保留计数返回”并且“在此执行路径中未引用对象泄漏:已分配对象”。这是我的代码中常见的警告类型,在每种情况下,分析器似乎都无法识别我正在设置实例变量的值。

我的问题是我是否确实泄漏了内存或分析仪是否错误。

2 个答案:

答案 0 :(得分:3)

分析器期望方法返回自动释放的对象,除非它们是alloc / init对或名称中有copy,根据Objective-C方法命名准则。尝试将初始化方法的名称从make:更改为initWithDimensions:,看看是否删除了警告。

答案 1 :(得分:0)

您需要在ArrayIndex方法中发布dealloc。不鼓励在alloc之后调用不以init开头的方法,这是一种不好的做法,可能会使静态分析器混乱。

以下是您需要添加到ArrayDimensions实施中以防止实际泄露的内容。

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