"CGLayer ya no se recomienda"; ¿Es este el consenso general?

CGLayer una aplicación de iOS en la que estoy usando CGLayer bastante éxito. Mientras investigaba forms de exprimir un poco más el performance de esta aplicación, encontré esta publicación de blog: http://iosptl.com/posts/cglayer-no-longer-recommended/ en la cual el autor declara muy ampliamente que CGLayer debe nunca se usará Una publicación individual por sí sola no es motivo de preocupación, pero también he encontrado personas que se refieren a esta publicación como algo a lo que deben acatar.

No se ofrecen detalles reales. Por ejemplo, el autor afirma que "a veces es más rápido, a veces es más lento". Esto me hace preguntarme si la preocupación es que, en general, los progtwigdores no usen correctamente este object.

Supongo que esta pregunta es para los desarrolladores experimentados de Cocoa / Cocoa Touch. ¿Hay algún mérito para esto? ¿ CGLayer es algo que debe evitar y, de ser así, existen razones específicas y mensurables de por qué?

Para comenzar con mi respuesta, me gustaría concluir que su decisión de layout es totalmente suya, ya sea que use CGLayer en su aplicación o no.

Lo real es que si estás dibujando algo en la pantalla, posiblemente no te compre nada en la plataforma iOS. En iOS, el bloque de composition de pantalla básica es un CALayer . CALayer toma un context de charts de cuarzo (CG) para dibujar eso en la pantalla y ese podría ser un context creado por CGLayer . Ahora, CALayer siendo el hardware acelerado por sí mismo, intentaría almacenar en caching cualquier contenido de charts en la tarjeta gráfica y reutilizarlos. Y ese es el propósito con el que habíamos usado anteriormente un CGLayer .

Además, si se trata de representación fuera de pantalla, un CALayer puede hacer eso cuando shouldRasterize esté configurado en YES y bajo otras circunstancias. Sin embargo, tenga en count que la composition fuera de pantalla es nuevamente otra tarea realizada por la CPU antes de entregar el contenido procesado a la GPU. De nuevo, no hay un ganador claro.

CGLayer sería particularmente útil al crear un context de CG que no se dibujará en la pantalla, como un context de PDF.

No estoy seguro de por qué el equipo de desarrollo de Apple le pidió a uno que evite CGLayer completo. Es posible que exista algún defecto arquitectónico subyacente, pero eso es indocumentado, hasta la date. Sin embargo, hasta que estamos seguros de eso y tenemos aplicaciones existentes diseñadas sobre la architecture de CGLayer , no encuentro ninguna razón específica para abandonarlas por completo.

No. Ignore el "Nunca" citado en el blog, a less que nunca haga un perfil del impacto que CGLayer tiene en su aplicación.

Considere CGLayer s como una posible optimization para su progtwig. CGLayer tienen el potencial de afectar el performance y el consumo de resources de su progtwig de manera positiva y negativa (una compensación en muchos casos). En abstracto, se parece mucho a un caching (que tiene sus propios costos). Los mecanismos de caching alternativos tienen sus propios costos asociados, y CGLayer puede o no ser la mejor implementación de caching para su progtwig.

Para mí, el punto más relevante es lo que escribió el autor en uno de sus comentarios de seguimiento:

Según lo entiendo del equipo Core Graphics, básicamente no lo han tocado [CGLayer] desde antes de que salga el iPhone. Fue una de esas cosas que sonaba muy bien, pero no funcionó en la práctica. Pero en realidad no está roto, así que no hay razón para desaprobarlo. Y como mencioné, si tiene un excelente código CGLayer, no veo ninguna razón para replacelo. CGLayer no está mal . Simplemente no se mantiene como otras partes de CG.

Sería útil que la Guía de progtwigción de Quartz 2D de Apple (actualizada 2014) no contuviera el siguiente recuadro de comentarios destacado:

Nota: Los contexts de charts de bitmap se utilizan a veces para dibujar fuera de pantalla. Antes de decidir utilizar un context de charts de bitmap para este propósito, consulte Dibujo de capa de charts de núcleo. Los objects CGLayer (CGLayerRef) están optimizados para el dibujo fuera de pantalla porque, siempre que sea posible, Quartz almacena en caching capas en la tarjeta de video.