NSCache и постоянство?
Мое приложение выполняет поиск некоторых элементов и загружает изображение для каждого полученного результата. Он показывает результаты в табличном представлении, ячейку на результат, и каждая ячейка показывает соответствующее изображение.
Я хотел бы кэшировать изображения, чтобы избежать их загрузки, если поиск уже был выполнен с теми же параметрами. Я читал о NSCache
как хороший вариант для этого, например, в этой статье, но я также читал здесь, что NSCache
не сохраняется между запусками приложения. Я не смог найти эту информацию в документации Apple, может ли кто-нибудь помочь мне найти ее?
Если я хотел бы сохранить загруженные изображения даже между запусками приложений, и я не смогу сделать это с NSCache
Как мне тогда управлять этим?
2 ответа
Кэширование является зависимой от приложения задачей. Например, как вы говорите, d не может использовать NPCache, потому что он не хранится постоянно. Вы можете попытаться настроить свой HTTP-сервер (!) Так, чтобы система загрузки URL-адресов вашего приложения сохраняла загруженные изображения как можно дольше. Но очень трудно добиться, чтобы кеш делал именно то, что вы хотите. Третий вариант - использовать бесплатный фреймворк, который сделает кеширование за вас. Хотя я думаю, что у них есть некоторые недостатки, вы должны взглянуть на них. Четвертый вариант - написать свой собственный кеш, который делает именно то, что вы хотите и нуждаетесь. Это не так сложно, как кажется. Как предложил @rmaddy, это, по сути, чтение и запись изображения в папку кеша.
Я тоже столкнулся с такой же проблемой. Я создал легкую библиотеку. Он хранит данные в NSCache и синхронизирует их с папкой кеша. Таким образом, ваши данные доступны между запусками вашего приложения.
Использование: class MyClass {
private let cache: SmartCache<URL, Data> = .init()
func downloadImage(from url: URL) {
if let data = self.cache[url], let image = NSImage(data: data) {
// Here your `image`
} else {
// Download your image and save it to our cache
cache[url] = image.tiffRepresentation
}
}
}
https://github.com/nightwill/smart-cache.git