使用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保留计数返回”并且“在此执行路径中未引用对象泄漏:已分配对象”。这是我的代码中常见的警告类型,在每种情况下,分析器似乎都无法识别我正在设置实例变量的值。
我的问题是我是否确实泄漏了内存或分析仪是否错误。
答案 0 :(得分:3)
分析器期望方法返回自动释放的对象,除非它们是alloc
/ init
对或名称中有copy
,根据Objective-C方法命名准则。尝试将初始化方法的名称从make:
更改为initWithDimensions:
,看看是否删除了警告。
答案 1 :(得分:0)
您需要在ArrayIndex
方法中发布dealloc
。不鼓励在alloc
之后调用不以init
开头的方法,这是一种不好的做法,可能会使静态分析器混乱。
以下是您需要添加到ArrayDimensions
实施中以防止实际泄露的内容。
-(void)dealloc
{
[dims release];
[super dealloc];
}