При загрузке изображений в приложение с помощью [UIImage imageNamed: fileName]
система кэширует изображения и, следовательно, обеспечивает повышение производительности при повторном использовании этого изображения.
Есть ли что-то похожее для изображений, созданных с помощью Core Graphics?Я имею в виду изображения, созданные из контекстов методом UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
.
Текущий подход, который у меня есть, - это нарисовать изображение и сохранить UIImage на диск, чтобы в следующий раз мне понадобился тот же метод рисования, который я могупросто загрузите кэшированный образ с диска.Я ищу лучший способ хранения изображений, сгенерированных Core Graphics, поскольку текущий подход кажется громоздким.
Может быть, даже хранить CGContextRef со всем рисунком в некоторой кеширующей структуре данных, я не совсем уверен,это возможно?
Моя цель - использовать только Core Graphics, чтобы мой пакет приложений был меньше и я получил независимость от разрешения, но я хотел бы повысить производительность, поскольку сложные процедуры рисования могут занимать много времени для обработки.
ОБНОВЛЕНИЕ: После некоторого тестирования производительности вот мои результаты.Каждый раз это в среднем более 100 прогонов, каждый из которых рисует 19 или 25 разных видов.Представления включены, прямоугольники, круги, а также текст в виде UILabels.Были использованы заливки, обводки, градиенты и тени.
Кэширование было реализовано, как обсуждалось в ответе, с NSDictionary, хранящим объекты UIImage.Каждый прогон имел индивидуальный кеш, который использовался в прогоне, но не для всех представлений (из 25 было 2 набора по 8, 2 набора по 6 из 19, которые были идентичны и могли быть кэшированы).
Вот времена: Симулятор iOS
19 просмотров
Без кэширования - средний прогон 11,667ms
Кэширование - средний прогон 10,321 мс
25 просмотров
Без кэширования - средний прогон 14,304 мс
Кэширование - средний прогон 13,509 мс
Устройство
19 просмотров
Без кэширования - в среднем 82,785 мс Кэширование - в среднем 77,831 мс
25views
Без кэширования - в среднем 107,977 мс Кэширование - в среднем 100,094 мс
Существует заметная разница (почти 8%) между временем и учетом более длительного первого времени (досохранить в кеш) все равно было бы полезно использовать кеш.