¿Por qué este código llama a un grupo de lanzamiento automático?

Veo el siguiente registro ...

"__NSAutoreleaseNoPool (): Objeto 0x58264b0 de la clase UITableViewCellContentView liberado automáticamente sin un grupo en su lugar, solo tiene una fuga"

Es un registro enorme del grupo de lanzamientos, arriba es solo uno de los registros de lanzamiento que copié ...

Tengo una CustomCell que agrega mosaicos a sí misma dependiendo de la lógica comercial. Pero el problema es que cuando llamo a la creación de la celda, veo los mensajes de registro anteriores. No veo nada malo en mi código. ¿Alguien tiene alguna pista al respecto?

- (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;
}

preguntado el 16 de mayo de 11 a las 16:05

2 Respuestas

Una cosa que sí noto es que no está reutilizando ninguna de sus celdas de visualización uitable, por lo que probablemente esté teniendo un gran impacto en el rendimiento. En su código anterior, está creando un nuevo identificador de celda para cada fila. Prueba esto en su lugar:

- (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;
}

De esta manera, su vista de tabla puede mantener una lista de celdas de tabla que están marcadas para su reutilización.

contestado el 16 de mayo de 11 a las 23:05

Una mejor pregunta es por qué no tiene un grupo de liberación automática.

Estas son algunas de las llamadas que realiza en ese código que pueden requerir un grupo de liberación automática. (Algunos de ellos probablemente no lo hagan, en realidad):

  • stringByAppendingString
  • stringWithFormat
  • dequeueReusableCellWithIdentifier
  • autorelease
  • getcellProgressNoteCollectionForLandScape (si está escrito según las convenciones)
  • clearColor (teóricamente, pero probablemente no)

UIKit requiere un grupo de liberación automática.

Tienes dos causas potenciales que veo:

  1. Su grupo de liberación automática se ha ido. (¿A donde se fué?)
  2. Esto se llama desde un hilo distinto del hilo principal.

contestado el 19 de mayo de 11 a las 01:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.