Кэширование изображений в памяти на iOS, что меньше: объект UIImage или NSData? - PullRequest
3 голосов
/ 14 октября 2011

Я работаю над кешем изображений на iOS.Изображения загружаются с URL-адреса и хранятся в NSDictionary в виде UIImage (я не хочу или не нуждаюсь в кеше «на диске»).

Вопрос: нужно ли хранить изображения в своем словаре как UIImage или NSData?Какой из них значительно меньше по объему памяти?

Ответы [ 2 ]

7 голосов
/ 14 октября 2011

UIImage имеет оптимизации для автоматического реагирования на ситуации с нехваткой памяти и освобождения его кэшированных представлений.Из справки UIImage:

В ситуациях с нехваткой памяти данные изображения могут быть удалены из объекта UIImage, чтобы освободить память в системе.Такое поведение при очистке влияет только на данные изображения, хранящиеся внутри объекта UIImage, а не на сам объект.Когда вы пытаетесь нарисовать изображение, данные которого были удалены, объект изображения автоматически перезагружает данные из исходного файла.Этот дополнительный шаг загрузки, однако, может повлечь за собой небольшое снижение производительности.

Вообще говоря, вы должны оставить данные изображения в UIImage.

.при необходимости выбирайте NSPurgeableData или ваши собственные объекты вместе с NSCache вместо NSDictionary.NSCache - это особенно хорошая память, хранящаяся в ней, она может автоматически освобождаться ОС, даже когда вы приостановлены, что позволяет избежать прерывания работы в фоновом режиме.UIImage уже многое сделает для вас, но NSCache позволит вам освободить все данные, а не только несжатые данные.

5 голосов
/ 14 октября 2011

NSData меньше, потому что он хранит сжатую версию изображения. Но распаковка занимает время , поэтому, если позволяет память, кэшируйте UIImage и очищайте кеш, если вы получите предупреждение о памяти.

...