Утечка памяти, nsmutablearray и пользовательский объект - PullRequest
0 голосов
/ 29 июля 2011

Я пытался найти похожие проблемы, но не нашел хороших решений.Поэтому я надеюсь, что кто-то может мне помочь.

По сути, у меня есть утечка в этом методе, который заполняет массив объектами Card (tempArray создается и заполняется над этим циклом):

for(int i = 0; i < numberOfCards; i += 2) {
    int randomNumber = (arc4random() % [tempArray count]);
    NSNumber *number = [tempArray objectAtIndex:randomNumber];
    [tempArray removeObject:number];

    Card *card1 = [[Card alloc] initWithCategory:category andNumber:[number intValue]];
    Card *card2 = [[Card alloc] initWithCategory:category andNumber:[number intValue]];

    [number release];

    [cards addObject:card1];
    [cards addObject:card2];
}

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

-(void) dealloc {
    [cards release];

    [super dealloc];
}

Я пробовал autorelease на card1 и card2, пытался сделать их переменными класса.Но, похоже, ничто не поможет.Либо у меня утечка, либо, если я пытаюсь добавить релиз на карточку 1 или карточку 2, приложение вылетает.У кого-нибудь есть идея, что здесь не так?

1 Ответ

2 голосов
/ 29 июля 2011

Вам необходимо освободить каждый Card объект после того, как вы добавили его к cards.При добавлении их к cards счет сохранения каждого объекта автоматически увеличивается.Поэтому добавьте:

[card1 release];
[card2 release];

после

[cards addObject:card1];
[cards addObject:card2];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...