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



使用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保留计数",并且"对象泄漏:分配的对象在此执行路径中未被引用"。在我的代码中,这是一种常见的警告类型,在每种情况下,分析器似乎都无法识别我正在设置实例变量的值。

我的问题是我是否确实泄漏内存或如果分析器是错误的。

分析器期望方法返回一个自动释放的对象,除非它们是alloc/init对或者名称中有copy,按照Objective-C方法命名指南。尝试将初始化方法的名称从make:更改为initWithDimensions:,看看是否可以消除警告。

您需要在dealloc方法中释放ArrayIndex。也不鼓励在alloc之后调用不以init开头的方法,这是一个不好的做法,可能会混淆静态分析器。

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

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

最新更新