Если вы в конечном итоге ссылаетесь на один и тот же CGImageRef (например, путем совместного использования UIImage *), изображение не будет загружаться несколько раз различными видами. Именно этот метод используется в демонстрационной программе Core Animation videowall на основной конференции WWDC 07 . Это код OSX, но UIViews очень похожи на CALayers.
То, как Core Graphics обрабатывает изображения (по моим наблюдениям, так или иначе), сильно подправлено для своевременной загрузки и агрессивного высвобождения при нехватке памяти.
Используя большое изображение, вы можете в конечном итоге загрузить его во время отрисовки, если память для декодированного изображения, на которое указывает CGImageRef, была возвращена системой.
Разница не в том, сколько изображений у вас есть, а в том, как часто UIKit пересекает ваш код.
Как UIViews, так и Core Animation CALayers будут перекрашиваться только в том случае, если вы попросите их (-setNeedsDisplay
), а узким местом обычно является ваш код плюс перенос визуализированного содержимого в текстуру для графического чипа.
Поэтому я советую продумать макет UIView таким образом, чтобы можно было одновременно обновлять части, которые изменяются вместе, что превращается в одну загрузку текстуры.