调用者此时不拥有的对象的引用计数的不正确的减少

时间:2010-11-05 23:39:34

标签: objective-c cocoa memory-management

我有一个非常简单的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

1 个答案:

答案 0 :(得分:18)

您正在释放从属性getter方法返回的对象,在许多情况下,这将指示可能的错误。这就是静态分析正在捡起来的原因。

相反,请使用:

self.name = nil;

或:

[name release];
name = nil;