我有一个非常简单的Person类,它有一个叫做名字的ivar(一个NSString)。当我尝试在dealloc中释放这个ivar时,静态分析器给我一个奇怪的错误:
引用的减少不正确 不拥有的对象的计数 此时由来电者
我做错了什么?
BTW,这是我的代码:
@interface Person : NSObject {
}
@property (copy) NSString *name;
@property float expectedRaise;
@end
@implementation Person
@synthesize name, expectedRaise;
-(id) init {
if ([super init]) {
[self setName:@"Joe Doe"];
[self setExpectedRaise:5.0];
return self;
}else {
return nil;
}
}
-(void) dealloc{
[[self name] release]; // here is where I get the error
[super dealloc];
}
@end
答案 0 :(得分:18)
您正在释放从属性getter方法返回的对象,在许多情况下,这将指示可能的错误。这就是静态分析正在捡起来的原因。
相反,请使用:
self.name = nil;
或:
[name release];
name = nil;