Есть ли снижение производительности при использовании UIImage в CALayer?

StackOverflow https://stackoverflow.com/questions/202792

  •  03-07-2019
  •  | 
  •  

Вопрос

Я использую целую кучу CALayers, создавая изображение на основе плиток, мало чем отличающееся от GoogleMaps (разные версии одного и того же изображения с большей / меньшей детализацией).

Код, который я использую для этого, является:

UIImage* image = [self loadImage:obj.fileName zoomLevel:obj.zoomLevel];
[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];
obj.layerToAddTo.contents = [image CGImage];
[CATransaction commit];

На самом деле мне не хочется загружать CGImage из файла с помощью CoreGraphics, потому что я ленив.Но я сделаю это, если будет большой прирост производительности!LoadImage просто искажает строку, чтобы получить правильный путь для загрузки указанного изображения, а obj - это NSObject-структура, которая содержит всю необходимую мне информацию для этого потока.

Помочь?

Это было полезно?

Решение

Большого прироста производительности нет - если уж на то пошло, то все наоборот.Используя UIImage для загрузки ваших изображений, вы получите все преимущества кэширования, которые он делает для вас, и это будет очень быстрый инструмент для использования с вашими различными CALayers.

Другие советы

Я только что попробовал это, и использование чистой CoreGraphics для загрузки изображения вместо использования UIImage дало заметное улучшение скорости при загрузке большого количества изображений за один раз.

"Я только что попробовал это, и использование чистой CoreGraphics для загрузки изображения вместо использования UIImage дало заметное улучшение скорости при загрузке большого количества изображений за один раз".

Как вам удалось избежать использования UIImage?Или, точнее, как вы загружаете файл изображения непосредственно в CoreGraphics, не проходя через UIImage?

Одна из причин, почему НЕ следует использовать UIImage -imageNamed: ошибка загрузки изображений заключается в том, что они хранятся во внутреннем кэше и этот кэш не очищается в случае нехватки памяти.

У меня нет определенного ответа, но я бы предположил, что вы увидите более медленное время загрузки при использовании UIImage, чем при использовании CGImage.С помощью CGImage вы указываете тип изображения (jpg или png) во время создания, но с помощью UIImage тип объекта должен определяться динамически.По общему признанию, это, вероятно, так же просто, как просмотреть первые несколько байтов файла изображения, но это может быть и не так.

Как только изображение действительно будет использовано, я бы не подумал, что вообще будет какая-либо разница между использованием CGImage, который внутренне представляет UIImage, ииспользуя CGImage, который вы создали сами.Я бы подумал, что они были бы в точности эквивалентны.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top