Утечка памяти после перехода к объявлению @property? - PullRequest
1 голос
/ 19 марта 2012

Почему у меня здесь утечка памяти:

.h:

@property (nonatomic, retain) NSDictionary *info;

а потом в моем .m:

@synthesize info = _info;

и у меня одна утечка:

- (id)initWithData:(NSDictionary *)data
{
    self = [super init];
    if (self) {
        self.info = [[NSDictionary alloc] initWithDictionary:data];
    }
    return self;
}

И еще одна утечка здесь:

-(void)dealloc {
    [self.info release];
    [super dealloc];
}

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

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

self.info = [[NSDictionary alloc] initWithDictionary:data];

Сохраняет переменную, и, так как alloc также сохраняет переменную, вы получаете +2 счетчика, вы должны либо автоматически освободить объект, либо назначить его как

 _info = [[NSDictionary alloc] initWithDictionary:data];

также когда вы освобождаете свойство, сделайте это, установив его в ноль

self.info=nil
1 голос
/ 19 марта 2012

Ваш конструктор должен использовать

self.info = [NSDictionary dictionaryWithDictionary:data];

Ваша сделка должна быть упрощена до

- (void)dealloc {
    self.info = nil;
    [super dealloc];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...