Как освободить память, используя UITableViewController - PullRequest
0 голосов
/ 21 декабря 2009

Я использую инструменты для мониторинга использования памяти. Я замечаю, что память всегда увеличивается и больше не освобождается на моем UITableViewController. Я не понимаю почему. После я перечисляю мои коды

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    int row =  [indexPath section];
    static NSString *CellIdentifier = @"ApplicationCell";
    BookCell *cell = (BookCell *)[tableViewdequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"BookCell" owner:self options:nil];
        cell = bookCell;
        self.bookCell=nil;
    }   
    Book *book = [books objectAtIndex:row];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.bookNameLabel.text = book.author;  
    cell.bookPriceLabel.text = book.price;
    cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
        return cell;
}

Ответы [ 3 ]

0 голосов
/ 21 декабря 2009

Ваш код выглядит для меня без утечек.

Я также заметил, что следующая строка выглядит так, как будто она должна вызвать преждевременное освобождение вашего пользовательского объекта ячейки (при условии, что свойство bookCell объявлено как «retain»):

self.bookCell=nil;

Я бы рекомендовал удалить его полностью. Вы также можете изменить его на (при условии, что имя переменной экземпляра соответствует имени свойства):

bookCell=nil;
0 голосов
/ 21 декабря 2009

Hie ...

Просто попробуй так, надеюсь, я бы сработал

  • (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath { int row = [indexPath section];

    if (cell == nil) { [[NSBundle mainBundle] loadNibNamed: @ "BookCell" владелец: собственные параметры: ноль]; cell = bookCell; self.bookCell = ноль; }
    Book * book = [books objectAtIndex: row]; cell.selectionStyle = UITableViewCellSelectionStyleNone; cell.bookNameLabel.text = book.author;
    cell.bookPriceLabel.text = book.price; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; возвратная ячейка; }

0 голосов
/ 21 декабря 2009

Ответ №1:

Если вы имеете в виду распределение памяти, а не утечку памяти, вот предложение.

Реализуйте viewDidUnload , чтобы освободить части вашего viewcontroller, которые больше не нужны. Как правило, вы будете повторно создавать эти объекты в viewDidLoad (или loadView , если вы не используете файлы XIB).

Вы можете визуализировать это, поместив операторы NSLog внутри viewDidUnload и в имитаторе iphone и нажав «Оборудование-> Предупреждение о симуляции памяти», если они не выгружены, большинство ваших невидимых контроллеров представления будут запускаться 1017 * viewdidunload метод.

Ответ № 2:

Если вы имеете в виду утечки памяти, то я подозреваю, что загрузка ячеек таблицы приводит к утечке памяти. Вот хороший справочник для загрузки табличных ячеек из xibs . Ваш метод может быть правильным, я просто не знаком с ним.

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