with uicollectionviewflowlayoutautomaticsize uicollectionviewdelegateflowlayout systemlayoutsizefitting automatic ios objective-c uitableview uicollectionview autolayout

uicollectionviewflowlayoutautomaticsize - iOS*Rendimiento de la celda: ¿Autolayout vs Frame?



uicollectionviewdelegateflowlayout (2)

Según tengo entendido, en mi caso, el diseño automático debería ser más lento que el marco fijo

El diseño automático es casi siempre más lento. Pero en la mayoría de las situaciones, la diferencia entre usar el diseño automático y el diseño fijo no debe ser notable.

Si solo tiene cinco géneros diferentes, está bien usar diferentes identificadores únicos de reutilización de celdas para cada género / diseño. Eliminará la necesidad de agregar / eliminar restricciones después de cada operación de dequeue. Consulte esta excelente respuesta para obtener más información: https://stackoverflow.com/a/18746930/1990236

Estoy usando el diseño automático para las celdas (UITableViewCell y UICollectionViewCell), pero noté un inconveniente de rendimiento significativo cuando las células se vuelven a usar y me pregunto qué podría hacer para mejorarlo.

Tal vez se deba a la forma en que creo / configuro la celda, en mi aplicación necesito mostrar libros como celdas, y diferentes géneros de libros tienen diferente diseño, pero solo tengo un BookCell, vuelvo a configurar las restricciones cuando se crea la celda / reutilizado para un Libro en particular basado en el género del libro.

Según tengo entendido, en mi caso, el diseño automático debería ser más lento que el marco fijo, ya que los pasos son los siguientes:

diseño automático

  1. eliminar las restricciones actuales
  2. volver a agregar restricciones dependiendo del género del libro
  3. establecer todas las etiquetas / vistas de imágenes para el libro

Creo que internamente en el paso 2 iOS volverá a ejecutar el solucionador de restricciones y en el paso 3 volverá a ajustar las restricciones (es decir, volverá a ejecutar el solucionador) para satisfacer todas las etiquetas y vistas de imágenes con texto e imágenes establecidas.

diseño fijo

(tenga una lista de diferentes marcos para etiquetas, vistas de imágenes, para diferentes géneros) 1. vuelva a establecer todas las etiquetas '', marcos de vistas de imágenes'' 2. establezca imágenes de ''imágenes de texto y vistas de etiquetas''

Me lleva algo de tiempo convertir todas las celdas de diseño automático para usar marcos fijos, y las cosas que puedo pensar para mejorar el rendimiento son:

  1. duplicar el BookCell genérico y crear una celda para cada género.
  2. establecer todas las etiquetas, vistas de imagen, antes de las restricciones de configuración
  3. no estoy muy seguro de esto, ¿debo agregar restricciones de diseño automático en el método updateConstraints , o en el inicializador (por ejemplo, initWithTableViewCellStyle:reusableIdentifier: ?

¡Muchas gracias!


La conversión de Diseño automático a marcos consumirá mucho tiempo y le brindará el menor beneficio en rendimiento. Sin mencionar complicaciones cuando desarrollas en iOS7. (Vea mi otra respuesta al respecto aquí).

Como muestra el estudio de Kugler, Auto Layout debería ser lo suficientemente rápido. No olvides los marcos o el Diseño automático, todo se reduce a cálculos matemáticos, algo en lo que las CPU modernas son bastante buenas.

En tu caso, recomendaría un enfoque bastante diferente. Para empezar, compruebe que está manipulando las restricciones correctamente y en el lugar correcto. Eso significa updateConstraints y updatedViewConstraints . Agregar o eliminar restricciones es una operación costosa. Pero realmente, solo deberías hacerlo una vez, a través de esos métodos, en la creación de vistas. No olvide verificar que las restricciones ya se hayan creado para que no obtenga excepciones al agregar repetidamente.

Además, recuerde, no necesita agregar o eliminar restricciones si solo está actualizando una constant . Algo que puede hacer fuera de los métodos mencionados anteriormente.

A continuación, considere lo que está sucediendo con la vista de tabla. Se desplaza rápidamente y cellForRowAtIndexPath está solicitando la siguiente celda. En tu caso, las células se ven muy diferentes. Para resolver eso, use un reuseIdentifier diferente para cada variación.

Siempre que su operación de datos para poblar la celda sea mínima, es posible que vea un pequeño escalofrío en la creación inicial de la celda. Sin embargo, a partir de entonces, el desplazamiento debe ser muy suave.