Objective C утечка памяти - PullRequest
1 голос
/ 26 июля 2010

Хочу уточнить, есть ли утечка памяти в этом коде? Насколько я чувствую его там.

в .h файле

@interface MyClass{
     NSMutableArray *dataArray;    
}

@property(nonatomic,retain) NSMutableArray *dataArray;

в .m файле

-(id) init{    
    self. dataArray = [[NSMutableArray alloc]init];    
}

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

Ответы [ 3 ]

2 голосов
/ 26 июля 2010

Да, там есть утечка.

Должно быть

self.dataArray = [[[NSMutableArray alloc] init] autorelease];

Поскольку dataArray определено как свойство retain, с использованием self.dataArray в левой частиприсвоение подразумевает сохранение в правой части.

edit: ... плюс освобождение объекта, который ранее был сохранен в self.dataArray, который равен nilво время первоначального вызова.

2 голосов
/ 26 июля 2010

Да, в init.dataArray объявляется с атрибутом retain.Таким образом, он сохраняет данный массив.Но так как вы распределили его, у вас есть его, и вы должны отпустить его потом.

Также сделка не является хорошей.Этот код может аварийно завершить работу при некоторых обстоятельствах (возможно, не здесь), потому что вы освобождаете объект, которым вы не владеете.

0 голосов
/ 26 июля 2010

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

...