使用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];
}