Я узнал, что могу ссылаться на данные изображения с URL-адреса, чтобы уменьшить масштаб изображения перед его декодированием, что экономит огромный объем памяти на устройстве:
func downsample(imageAt imageURL: URL, to pointSize: CGSize, scale: CGFloat) -> UIImage {
let imageSourceOptions = [kCGImageSourceShouldCache: false] as CFDictionary
let imageSource = CGImageSourceCreateWithURL(imageURL as CFURL, imageSourceOptions)!
let maxDimensionInPixels = max(pointSize.width, pointSize.height) * scale
let downsampleOptions =
[kCGImageSourceCreateThumbnailFromImageAlways: true,
kCGImageSourceShouldCacheImmediately: true,
kCGImageSourceCreateThumbnailWithTransform: true,
kCGImageSourceThumbnailMaxPixelSize: maxDimensionInPixels] as CFDictionary
let downsampledImage =
CGImageSourceCreateThumbnailAtIndex(imageSource, 0, downsampleOptions)!
return UIImage(cgImage: downsampledImage)
}
Теперь я попытался выяснить,это также возможно с изображениями из ресурса, но я пока не нашел никакого решения.Поскольку вы не можете инициализировать изображения как NSDataAsset для ссылки на его данные, мне интересно, есть ли другая возможность.
Я уже пытался загрузить изображение из ресурса и преобразовать его в данные с помощью let imageData = UIImage(named: "imageName")?.pngData()
, но я узнал,что все изображение сначала загружается в память.Так что это не дает мне никакого преимущества.