Почему этот код вызывает пул автоматического выпуска? - PullRequest
0 голосов
/ 16 мая 2011

Я вижу следующий журнал ...

"__ NSAutoreleaseNoPool (): объект 0x58264b0 класса UITableViewCellContentView автоматически освобожден без пула на месте - только утечка"

Это огромный журнал пула релизов, выше - только один из журнала релизов, который я скопировал ...

У меня есть CustomCell, который добавляет плитки в себя в зависимости от бизнес-логики. Но проблема в том, что когда я вызываю создание ячейки, я вижу вышеупомянутые сообщения журнала. Я не вижу ничего плохого в моем коде .. Кто-нибудь имеет какое-либо представление об этом?

- (UITableViewCell *) tableView:(UITableView *)inTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{ 
    UnSavedNoteListCell *cell;
    NSString *CellIdentifier = [@"Cell_" stringByAppendingString:[NSString stringWithFormat:@"%d", indexPath.row]];
     cell = (UnSavedNoteListCell *)[inTableView  dequeueReusableCellWithIdentifier:CellIdentifier];


if (cell == nil) 
{

    NSMutableArray *cellProgressNoteCollection = [self getcellProgressNoteCollectionForLandScape:indexPath];
    cell = [[[UnSavedNoteListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier cellTiles:cellProgressNoteCollection] autorelease];
    cell.backgroundColor = [UIColor clearColor];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

}

//    cell.textLabel.text = [NSString stringWithFormat:@"%d", rand()];
//    cell.textLabel.textColor = [UIColor redColor];
// Configure the cell...

return cell;
}

Ответы [ 2 ]

0 голосов
/ 19 мая 2011

Лучший вопрос - почему у вас нет пула автоматического выпуска.

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

  • stringByAppendingString
  • stringWithFormat
  • dequeueReusableCellWithIdentifier
  • autorelease
  • getcellProgressNoteCollectionForLandScape (если написано в соответствии с соглашениями)
  • clearColor (теоретически, но, вероятно, нет)

UIKit требует пула автоматического выпуска.

У меня есть две потенциальные причины, которые я вижу:

  1. Ваш пул авто-релиза исчез.(Куда это делось?)
  2. Вызывается из потока, отличного от основного потока.
0 голосов
/ 16 мая 2011

Одна вещь, которую я замечаю, это то, что вы не используете ни один из ваших uitableviewcells, так что вы, вероятно, получаете большой удар по производительности.В приведенном выше коде вы создаете новый идентификатор ячейки для каждой строки.Попробуйте вместо этого:

- (UITableViewCell *) tableView:(UITableView *)inTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{ 
    NSString *CellIdentifier = @"Cell";
    UnSavedNoteListCell  *cell = (UnSavedNoteListCell *)[inTableView  dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) 
    {
        NSMutableArray *cellProgressNoteCollection = [self getcellProgressNoteCollectionForLandScape:indexPath];
        cell = [[[UnSavedNoteListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier cellTiles:cellProgressNoteCollection] autorelease];
        cell.backgroundColor = [UIColor clearColor];
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

    }

    return cell;
}

Таким образом, ваше табличное представление может поддерживать список ячеек таблицы, помеченных для повторного использования.

...