2009-02-27 9 views
5

Tengo curiosidad de cuán caro en cuanto a los recursos es recargaRedaData de UITableView? Tengo una aplicación que hará aproximadamente 10 solicitudes HTTP posteriores, y a medida que obtiene datos/preparaciones, vuelve a cargar TableView. A medida que el conjunto de datos se hace cada vez más grande, se está volviendo muy lento. Estoy tratando de averiguar si se debe a la cantidad de veces que estoy recargando TableView o debido a la forma en que capturo/analizo los datos.¿Qué tan caro es recargableData de UITableView?

¿Cuál es la mejor práctica en este caso?

Respuesta

5

La mejor práctica es hacer que su implementación de cellForRowAtIndexPath: haga el menor trabajo posible. De hecho, realmente no debería hacer ningún trabajo excepto rellenar la instancia UITableViewCell con los datos que necesita mostrar.

Debe utilizar la memoria caché UITableViewCell s para que no tenga que asignar una nueva celda cada vez. Si puede hacer su análisis sintáctico y demás en un hilo separado y hacer que los datos analizados, listos para presentar, sean accesibles al cellForRowAtIndexPath:, no debería tener ningún problema de rendimiento.

No dijo si estaba utilizando una subclase personalizada UITableViewCell, pero si lo está, las jerarquías de vista profunda también pueden presentar un problema de rendimiento, ya que cada vista en la jerarquía se dibuja. Cuanto más plana puedas hacer UITableViewCell s, mejor.

Espero que te mueva en la dirección correcta.

+0

Si está haciendo solicitudes HTTP, creo que están pasando en un hilo diferente de forma gratuita, a menos que específicamente le diga que no lo haga. –

4

Lo mejor es perfilar su aplicación para ver dónde está lenta.

Dicho esto, si sus celdas de la tabla son todas de la misma altura, entonces creo

reloadData

Sólo tiene que llamar

cellForRowAtIndexPath

para celdas que son visibles en la pantalla.

1

Boot To The Head es correcto.

Estoy haciendo una actualización progresiva de la lista de artículos uno a uno en Instapaper, y llamo -reloadData en cada descarga completada. Suena similar a lo que estás haciendo. No da como resultado una ralentización notable del rendimiento.

2

Tabla expensas vista de recarga es:

  1. Averiguar cuántas secciones y filas por secciones que tiene
  2. conseguir altos de fila.

Las alturas de fila, en particular, se descifran para todos los elementos de la tabla, cada vez que llame datos de recarga.

El gasto restante es cellForRowAtIndexPath, que normalmente no es tan malo, ya que solo se solicita para tantas filas como están en la pantalla. Puede ser malo cuando se desplaza si no reutiliza las celdas como se supone que debe hacerlo.

La clave para usted es, probablemente, preguntarse qué desencadena la carga de HTML y posiblemente moverlo a un hilo de fondo.

15

De UITableView.h:

- (void)reloadData;     // reloads everything from scratch. redisplays visible rows. because we only keep info about visible rows, this is cheap. will adjust offset if table shrinks 

"Esta es barato."

implemente bien sus métodos de vista de tabla y no será un gran problema llamar a esta función todo el tiempo.

En una nota lateral, debe intentar usar los métodos apropiados para animar la adición y eliminación de filas si está pensando en usar reloadData para eso.

+1

+1 por usar la documentación! – wjl

Cuestiones relacionadas