Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 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
like image 833
cfischer Avatar asked Dec 03 '22 04:12

cfischer


1 Answers

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;
like image 183
Darren Avatar answered May 27 '23 05:05

Darren