¿Es más rápido crear UITableViewCell mediante progtwigción o cargar uno desde una punta?

El perfilador de time muestra la operación que consume más time en mi aplicación: carga UITableViewCells desde files nib. El más caro consiste en cargar una UITableViewCell con una image de 4 UITableViewCell .

Estoy cargando UITableViewCell desde la punta con el siguiente código:

  [[NSBundle mainBundle] loadNibNamed:@"UITableViewCellPortrait" owner:self options:NULL]; cell = portraitCell; self.portraitCell = nil; 

¿Alguien ha comparado la diferencia entre crear una vista mediante progtwigción o cargar una UITableViewCell desde una punta?

EDITAR:
Comparé el perfil de time de las repetidas ejecuciones de cargar UITableViewCell desde una punta y crear la vista mediante progtwigción. Mi testing consistió en alternar entre dos UITableViews unas 10 veces en el lapso de 3-5 segundos. En cada testing, cargar el progtwig UITableViewCell fue sustancialmente más rápido, entre 2x y 6x más rápido.

¿Alguien puede corroborar estos resultados?

EDIT: actualicé el código de carga de nib para cargar solo el file nib una vez y usar una versión almacenada en caching para llamadas posteriores.

  if (self.UITableViewPortaitNib == nil) { self.UITableViewPortaitNib = [UINib nibWithNibName:@"UITableViewCellPortrait" bundle:[NSBundle mainBundle]]; } self.UITableViewPortaitNib instantiateWithOwner:self options:NULL]; cell = portraitCell; self.portraitCell = nil; 

También utilicé el instrumento de automation para crear ejecuciones más consistentes y los resultados aún sugieren que cargar UITableViewCells progtwigción es más rápido que cargar UITableViewCells para una punta. El time de ejecución promedio para cargar UITableViewCells desde una punta fue de alnetworkingedor de 90 ms, mientras que el time promedio de ejecución para crear UITableViewCell progtwigción fue de UITableViewCell ms.

Intenta crear un object UINib una vez y luego enviarlo con las instantiateWithOwner:options: cada vez que necesites crear una nueva. De la reference de la class UINib :

Por ejemplo, si la vista de tabla usa un file nib para crear instancias de celdas de vista de tabla, el almacenamiento en caching de la nib en un object UINib puede proporcionar una mejora significativa en el performance.

En iOS 5 y mencionado en los videos de WWDC 2011, hay un método más nuevo que usa UINib. Usted registra su plumilla en su método viewDidLoad: y luego simplifica el código en el tableView:cellForRowAtIndexPath: Esto puede acelerar las cosas para usted (pero nunca he realizado ningún intervalo de comparación).

Ejemplo: en su vista, viewDidLoad: registre la punta y conserve una reference:

 NSString *myIdentifier = @"ReusableCustomCell"; [self.reuseCustomCell registerNib:[UINib nibWithNibName:@"ReusableCustomCell" bundle:nil] forCellReuseIdentifier:myIdentifier]; 

En su tableView:cellForRowAtIndexPath: método simplemente pregunte por la celda (no es necesario comprobar si hay nil, ya que se garantiza que devolverá una celda en iOS5) y configure la celda:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *myIdentifier = @"ReusableCustomCell"; ReusableCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:myIdentifier]; // Your configuration code goes here cell.nameLabel.text = @"some text"; // .... return cell; } 

Código no probado. Me interesaría si esto fuera más rápido que usar UINib solo.

cellTemplate la plumilla ( cellTemplate ) una vez y la cellTemplate según sea necesario, por lo que, en cierto sentido, este enfoque es tanto programático como basado en plumillas.

Duplicar fue más complicado de lo que esperaba, ya que mutableCopy no funcionaba. NSKeyedArchiver embargo, una ida NSKeyedArchiver sí:

 NSData* cellData = [NSKeyedArchiver archivedDataWithRootObject:cellTemplate]; cell = [NSKeyedUnarchiver unarchiveObjectWithData:cellData]; 

De hecho, si va por velocidad bruta, ardiente, pedal a metal, incluso la plantilla archivada puede calcularse una vez y almacenarse en caching.

Pero, ¿no deberías estar midiendo la velocidad de fotogtwigs? En ese caso, la complejidad de UIView también entra en juego.

Es posible reutilizar las plumas uitableviewcell que se cargaron una vez y luego salen de la vista. Lea lo siguiente:

iPhone: ¿Qué son los reutilizadores (UITableViewCell)?