Core Graphics caching

Al cargar imágenes en la aplicación con [UIImage imageNamed: fileName] , el sistema almacena en caching las imágenes y, por lo tanto, proporciona un aumento de performance cuando se utiliza la misma image nuevamente.

¿Hay algo similar para las imágenes creadas con Core Graphics? Me refiero a imágenes creadas a partir de contexts con UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); método.

El enfoque actual que tengo es dibujar la image y save el UIImage en el disco, para que la próxima vez necesite usar el mismo método de dibujo, simplemente puedo cargar la image en caching del disco. Estoy buscando una mejor manera de almacenar imágenes generadas por Core Graphics ya que el enfoque actual parece engorroso.

Tal vez incluso almacene el CGContextRef con todo el dibujo en una estructura de datos de almacenamiento en caching, ¿no estoy seguro de si es posible?

Mi objective es utilizar solo Core Graphics, por lo que mi package de aplicaciones es más pequeño y obtengo independencia de resolución, pero me gustaría mejorar el performance ya que las rutinas de dibujo complicadas pueden demorar mucho time en procesarse.

ACTUALIZACIÓN: después de hacer algunas testings de performance aquí están mis resultados. Cada vez es un promedio de más de 100 carreras, ya sea dibujando 19 o 25 vistas diferentes a la vez. Vistas incluidas, rectangularjs, círculos, pero también text como UILabels. Se usaron rellenos, trazos, gradientes y sombras.

El almacenamiento en caching se implementó tal como se describe en la respuesta, con un file NSDictionary que almacena los objects UIImage. Cada ejecución tenía un caching individual, que se usaba dentro de la ejecución, pero no para todas las vistas (de 25, había 2 series de 8, 2 series de 6 de 19, que eran idénticas y podían almacenarse en caching).

Aquí están los times: el simulador de iOS

19 visitas

Sin caching: ejecución promedio de 11.667 ms.

Almacenamiento en caching: ejecución promedio de 10,321 ms

25 visitas

Sin almacenamiento en caching: ejecución promedio 14.304 ms

Almacenamiento en caching: ejecución promedio de 13.509 ms

Dispositivo

19 visitas

Sin almacenamiento en caching – promedio de 82.785ms Almacenamiento en caching – promedio 77.831ms

25 visitas

Sin almacenamiento en caching: promedio 107.977ms Almacenamiento en caching: promedio de 100.094ms

Hay una diferencia notable (casi 8%) entre los times y cuando se considera la primera vez más (para save en caching), sería beneficioso usar el caching.

No tengo datos de performance para respaldar esto, pero creo que el almacenamiento en caching de UIImage al usar imageNamed es save la lectura del file desde "disco" y convertir el png o lo que sea a los datos de UIImage.

Por lo tanto, su enfoque de escribir en el disco parece ser un paso innecesario: una vez que tenga su object UIImage, está tan optimizado como lo va a conseguir.

Podría considerar algo así como un singleton de "fábrica" ​​de image que crea perezosamente las imágenes a medida que se solicitan, por lo que la primera vez, haría las operaciones básicas de charts centrales para crear el UIImage, y luego devolvería el object completado. Cada image diferente simplemente se almacenaría como un ivar en su fábrica.