Objective-c addObject в цикле вызывает утечку памяти - PullRequest
3 голосов
/ 07 мая 2011

Я нашел похожую проблему: NSMutableArray addObject для цикла - утечка памяти

Но ни одно из этих предложений не решает мою проблему.

У меня есть простой цикл, в котором я создаю объект и добавляю его в массив. Когда я пытаюсь освободить объект в конце каждого цикла, приложение вылетает с «EXC_BAD_ACCESS». Если я не отпускаю объект, у меня просачивается память:

в .ч

NSMutableArray *mainlist;
...
@property (nonatomic, retain) NSMutableArray *mainList;

дюйм.

@synthesize mainlist;
...

for (int i = 0; i < [self.objects count]; i++) {

    MyObj *myObj = [[MyObj alloc] init];

    myObj.title = [[self.objects objectAtIndex: i] valueForKey: @"title"];

    [self.mainlist addObject:myObj];

    [myObj release]; // crashes with release
}

MyObj просто обладает некоторыми свойствами:

@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *date_text;
...
@synthesize title;
@synthesize date_text;

- (void)dealloc
{
    [super dealloc];

    [title release];
    [date_text release];
}

@end

Любая помощь будет высоко ценится.

Спасибо.

1 Ответ

3 голосов
/ 07 мая 2011

Сбои приводят к тому, что вы сначала вызываете dealloc суперкласса, а затем пытаетесь освободить атрибуты.Измените это на:

- (void)dealloc
{
    [title release];
    [date_text release];

    [super dealloc];
}

А также: я почти уверен, что ваш self.mainlist равен нулю, когда вы добавляете туда объекты.Создание свойства не означает, что атрибут будет инициализирован автоматически.

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