Incorrect decrement of the reference count of an object that is not owned at this point by the caller
I have a very simple Person class that has a ivar called name ( an NSString). When I try to release this ivar in dealloc the static analyzer gives me a weird error:
Incorrect decrement of the reference count of an object that is not owned at this point开发者_Go百科 by the caller
What am I doing wrong?
BTW, here's my code:
@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
You're releasing an object returned from a property getter method, which in many cases would be the indication of a possible bug. That's why the static analysis is picking it up.
Instead, use:
self.name = nil;
or:
[name release];
name = nil;
精彩评论