Неправильное уменьшение счетчика ссылок объекта, который в данный момент не принадлежит вызывающей стороне - PullRequest
4 голосов
/ 06 ноября 2010

У меня есть очень простой класс Person, который имеет ивар с именем name (строка NSString). Когда я пытаюсь выпустить этот ivar в dealloc, статический анализатор выдает мне странную ошибку:

Неверное уменьшение ссылки подсчет объекта, который не принадлежит в этот момент вызывающий абонент

Что я делаю не так?

Кстати, вот мой код:

@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 Ответ

18 голосов
/ 06 ноября 2010

Вы освобождаете объект, возвращенный методом получения свойства, который во многих случаях будет указывать на возможную ошибку. Вот почему статический анализ набирает об этом.

Вместо этого используйте:

self.name = nil;

или

[name release];
name = nil;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...