NSMutableArray, removeFromArray и release, почему происходит сбой? - PullRequest
0 голосов
/ 20 января 2011

Следующий метод используется для очистки журнала от его пустых страниц в конце.

// self.pages property declaratioN, this is on the header
@property(nonatomic, retain) NSMutableArray *pages;

// method that crashes
- (void)cleanup {

    NSMutableArray *pagesToRemove = [[NSMutableArray alloc] init];
    for (int n = [self.pages count]-1; n >= 0; n--) {
        JournalPage *page = [self.pages objectAtIndex:n];
        if (![page isEmpty]) {
            break;
        } else {
            if (([self.pages count] - ([pagesToRemove count] + 1) > 2)) {
                [pagesToRemove addObject:page];
            } else {
                break;
            }               
        }

    }

    if ([pagesToRemove count] % 2 != 0) {
        [pagesToRemove removeLastObject];
    }
    [self.pages removeObjectsInArray:pagesToRemove];
    [pagesToRemove release]; // this line makes the app crash
}       

Выпуск pagesToRemove вызывает сбой.Сбой происходит также, если я удаляю [pageToRemove release] и использую вместо этого автоматическое высвобождение, когда я выделяю / инициализирую экземпляр NSMutableArray.

Без освобождения pageToRemove код работает, но я вижу утечку и лязгАнализатор также видит это.
Утечка кода;если нет, то почему?

1 Ответ

0 голосов
/ 20 января 2011

В вашем крашере есть опечатка:

[pageToRemove release]; // this line makes the app crash

Обратите внимание, что там написано pageToRemove, а не page s ToRemove.;)

...