¿Dónde indexPath de dequeueReusableCellWithIdentifier: forIndexPath: ¿se usa?

La documentation de Apple dice del parámetro indexPath :

La ruta del índice que especifica la location de la celda. La fuente de datos recibe esta información cuando se le solicita la celda y simplemente debe pasarla. Este método usa la ruta del índice para realizar una configuration adicional basada en la position de la celda en la vista de la tabla.

Pero register(Class|Nib):forCellReuseIdentifier: solo especifica el identificador de reutilización a usar, no la sección o un set de routes de índice.

Pensé que tal vez UITableViewCell tenía alguna forma de poner las manos en la ruta del índice, por lo que podría, por ejemplo, networkingondear sus esquinas si estuviera en la primera fila de una sección, pero no la veo. En el momento de la creación, todo lo que obtiene es su estilo y el identificador de reutilización ( initWithStyle:reuseIdentifier: ; En el momento de la reutilización, todo lo que se count es prepareForReuse .

Como el viejo dequeueReusableCellWithIdentifier: sigue siendo compatible, ¿qué tipo de configuration basada en ruta de índice podría estar haciendo, si no puede confiar en tener la oportunidad de hacerlo?

Revisé la Guía de progtwigción de Table View, pero no se ha actualizado desde iOS 5.

De acuerdo con la Sesión 200 de WWDC 2012 – Novedades de Cocoa Touch ,

Si usa - dequeueReusableCellWithIdentifier:forIndexPath: para eliminar su celda, tendrá el tamaño correcto y podrá hacer un layout dentro de contentView su celda.

Eso es más o less una cita de Chris Parker, ingeniero de UIKit.

Hasta iOS 6, tuvo que subclassar su UITableViewCell y replace - layoutSubviews si quería hacer ajustes de layout. Desde el punto de vista de la encapsulación, esta podría ser la mejor solución; sin embargo, a veces solo necesitas un pequeño ajuste, y ahora puedes hacerlo en - tableView:cellForRowAtIndexPath: lugar.

La diferencia más importante entre dequeueReusableCellWithIdentifier: y dequeueReusableCellWithIdentifier:indexPath: es que son diferentes methods! Por lo tanto, pueden comportarse de manera diferente, y lo hacen. Esto no tiene nada que ver con indexPath, realmente; solo necesitamos una forma de distinguirlos.

La nueva manera

En particular, si llama a dequeueReusableCellWithIdentifier:indexPath: esta es una señal de que está utilizando el nuevo sistema de logging y recuperación de iOS 6. Por lo tanto, si no ha podido registrar este identificador, obtendrá un buen locking y un post de logging que explica el problema. Este método nunca devolverá nada; siempre devuelve una celda, ya sea creando una nueva o reutilizando una.

La manera vieja

Por otro lado, dequeueReusableCellWithIdentifier: simple y dequeueReusableCellWithIdentifier: es antiguo y tiene que ser compatible con versiones anteriores. Si no ha registrado este identificador, no se quejará: simplemente devolverá cero, lo que lo dejará en un lugar alto y seco. Tendrás que crear la celda tú mismo, como en los viejos times.

EDIT: ¡ Pero mira también la respuesta de @svena! La nueva forma (con indexPath: tiene una segunda ventaja que no conocía: la celda tiene el tamaño correcto en el momento en que se le devuelve.

Creo que se usa para llamar al tableView:heightForRowAtIndexPath: si existe, permitir que la celda tenga el tamaño correcto.

Siempre pensé que UIKit networkingondearía las esquinas de las celdas superior e inferior en una vista de tabla agrupada cuando el método UITableViewDelegate :

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

se llama. Sin embargo, conocer la ruta del índice no es muy útil a less que la celda también sepa cuántas filas están en la misma sección para que funcione si es la última celda o no.

Supongo que la adición de la ruta de índice al método dequeueReusableCellWithIdentifier: es mejorar el performance tal como @jrturton sugirió con diferentes agrupaciones de reutilización o simplemente para determinar la position de una celda en secciones agrupadas.

Por lo que puedo recordar de los videos de la WWDC, se agregaron algunos methods adicionales en iOS 6 para admitir el reorderamiento, la inserción y la eliminación de las células, así que, ¿quizás esto también entra en el factor aquí?