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

Другие вопросы по тегам