Idk, почему мое изображение занимает больше места в кеш-памяти, чем исходный размер. Я использую библиотеку alamofireImage для этой цели, и мое приложение предназначено для tvOS. Вот мой код.Изображение занимает больше места в кеше, чем его первоначальный размер в tvos
let photoCache = AutoPurgingImageCache(
memoryCapacity: 100 * 1024 * 1024,
preferredMemoryUsageAfterPurge: 60 * 1024 * 1024
)
Alamofire.request(.GET, request, headers: headers)
.responseJSON { response in
if let JSON = response.result.value {
self.imagesArray = JSON["results"] as! NSMutableArray
for result in self.imagesArray{
self.getNetworkImage(result["url"] as! String, completion: { (UIImage) in
})}}}
func getNetworkImage(urlString: String, completion: (UIImage -> Void)) -> (Request) {
return Alamofire.request(.GET, urlString, headers: headers).responseImage { (response) -> Void in
guard let image = response.result.value else { return }
completion(image)
if response.response?.statusCode == 200{
self.cacheImage(image, urlString: urlString)
self.cachedImagesOnly.addObject(urlString)
}
if self.counter == 4{
self.activityIndicatorView.stopAnimating()
self.activityIndicatorView.hidden = true
var downloadedImage = UIImage()
let dicr = self.cachedImagesOnly.firstObject
let urlStringFetch = dicr!["url"] as! String
print("Fetching url: \(urlStringFetch)")
downloadedImage = self.cachedImage(urlStringFetch)!
print("Size of image from cache: \(downloadedImage.size)")
self.ssImage.image = downloadedImage
})
}
}
}
func cacheImage(image: Image, urlString: String) {
print("Total Cache memory size: \(self.photoCache.memoryCapacity)")
self.counter += 1
let jpgImageData = UIImageJPEGRepresentation(image, 1.0)
print("Image size before cache : \(jpgImageData?.length)")
self.cachedImagesOnly.addObject(urlString)
let URLRequest = NSURLRequest(URL: NSURL(string: "\(urlString)")!)
self.photoCache.addImage(UIImage(data: jpgImageData!)!, forRequest: URLRequest)
print("Cache memory usage after image cache: \(self.photoCache.memoryUsage)")
}
Результаты Лог:
Total Cache memory size: 104857600
Image size: (1752.0, 1896.0) and string as identifier: http://image.com/9493.jpg
Image size before cache : Optional(1738247)
Cache memory usage after image cache: 13287168
Total Cache memory size: 104857600
Image size: (2875.0, 3872.0) and string as identifier: http://image.com/5025.jpg
Image size before cache : Optional(7049508)
Cache memory usage after image cache: 57815168
Total Cache memory size: 104857600
Image size: (2394.0, 3866.0) and string as identifier: http://image.com/169215.jpg
Image size before cache : Optional(6049349)
Cache memory usage after image cache: 94835984
Total Cache memory size: 104857600
Image size: (3811.0, 3049.0) and string as identifier: http://image.com/786.jpg
Image size before cache : Optional(2848557)
Cache memory usage after image cache: 46478956
Итак, я прочитал на GitHub они используют FIFO, когда кэш-память заполнена, поэтому за исключением только удаление первого объекта удаляет два или три, как в расчете. Кроме того, просто рассмотрим первый результат журнала, размер изображения которого составляет 1738247 и IDK, что надбавка к нему добавляет к нему, что после кеша размер использования становится 13287168, что почти в 13 раз более странно. Если бы кто-нибудь прошел через эту проблему или мог идентифицировать мою ошибку, был бы высоко оценен. Заранее спасибо.
Разве они не распакованы в кеше? – Feldur
Nop, я попытался в браузере, размер изображения идеально подходит для обоих. поэтому есть проблема в кеше. –
кажется, что вы сравниваете яблоки и апельсины. Размер представления JPEG и объем памяти, используемый объектом 'UIImage' в кеше, - это две совершенно разные вещи. – Rob