#ios
#iOS
Вопрос:
//sample 1
uIImage.cgImage
//sample 2
UIImage(cgImage: cgImage)
В приведенном выше коде пример 1 преобразует UIImage в CGImage, а пример 2 преобразует CGImage в UIImage.
Мой вопрос:
Являются ли sample 1 и sample 2 тяжелой или легкой операцией? Если он просто получит CGImage из UIImage или сконструирует UIImage для переноса CGImage?
Комментарии:
1. Пока ресурс не был удален из-за нехватки памяти, извлечение связанного с ним
CGImage
не является дорогостоящим. Как правило, дорогостоящим является использование изображения (которое может вызвать распаковку ресурса).
Ответ №1:
Пример: 1
Если данные изображения были удалены из-за ограничений памяти, вызов этого метода заставляет эти данные загружаться обратно в память. Перезагрузка данных изображения может привести к снижению производительности.
Пожалуйста, обратитесь:https://developer.apple.com/documentation/uikit/uiimage/1624159-cgimage
Пример: 2
К сожалению, для этого нет доступных документов.
Но я лично проверил продолжительность преобразования как для примеров 1, так и для примеров 2, используя приведенный ниже код.
//Image Size: 3 MB
let image = UIImage.init(named: "2.jpg")!
print("Start Conversion: Image to CGImage",Date())
let cgImageSample = image.cgImage
print("End Conversion: Image to CGImage",Date())
print("Start Conversion: CGImage to UIImage",Date())
let imageConverted = UIImage(cgImage: cgImageSample!)
print("End Conversion:CGImage to UIImage",Date())
Журнал консоли:
Начать преобразование: изображение в CGImage 2019-03-18 05:17:02 0000 Конец
Преобразование: Изображение в CGImage 2019-03-18 05:17:03 0000 Начало
Преобразование: CGImage в UIImage 2019-03-18 05:17:03 0000 Конец
Преобразование: CGImage в UIImage 2019-03-18 05:17:04 0000
Вывод: Обе операции заняли 1 секунду для преобразования.
Предложение: Если вы хотите преобразовать много изображений, то это была тяжелая операция. Если вы хотите преобразовать одно изображение, то это не слишком сильно влияет на производительность.
Комментарии:
1. Да, хотя это, очевидно, актуально только при использовании
UIImage(named:)
. Если вы создали экземпляр изображения изData
,URL
или создали его программно, это не применяется.