Кэширование изображений не сохраняется после активации applicationDidEnterBackground

У меня возникла проблема, когда независимо от того, какую структуру я использую для кэширования своих изображений, от AFNetworking до методов кэширования SDWebImage для записи на диск. Каждый раз, когда я нажимаю кнопку «Домой», я возвращаюсь в приложение. Это похоже на то, что все изображения должны быть кэшированы RE.

понятия не имею с чего начать искать

Чтобы использовать обе сети AFNetworking для моих обычных сетевых функций, таких как JSON и загрузка изображений, я использовал https://gist.github.com/sibljon/5957892 для разрешения конфликтов пространств имен, поэтому я полностью переопределяю AFNetworkings UIImageView и придерживаюсь SDWebImage, поэтому вместо вызова

Благодаря jonsibley и его ответу я не звоню

[imageFile setImageWithURL:[NSURL URLWithString:friendAvatar] placeholderImage:[UIImage imageNamed:@"defaultProfileImage.png"]];

я сейчас звоню (сейчас только SD_ впереди), что позволяет мне переопределить кэширование AFNetworkings. Правильный?

[imageFile SD_setImageWithURL:[NSURL URLWithString:friendAvatar] placeholderImage:[UIImage imageNamed:@"defaultProfileImage.png"]];

ИЗМЕНИТЬ ОБНОВЛЕНИЕ:

После гораздо большего тестирования я обнаружил, что приложение очищает кеш, как только оно ВОЗОБНОВЛЯЕТ приложение, а НЕ когда оно начинает приостанавливаться (когда нажата кнопка «Домой»). Любая подсказка, что может быть причиной этого?


person NodeDad    schedule 17.07.2013    source источник


Ответы (1)


Вот две возможности. Обратите внимание на разницу между clea r Disk и clea n Disk.

  1. SDWebImage вызывает cleanDisk при получении UIApplicationWillTerminateNotification. Этот метод удаляет файлы старше срока их действия. После этого он очищает файлы от самых старых до самых новых, пока не будет достигнут настроенный максимальный размер кэша.

    Если вы не устанавливаете свойство maxCacheSize SDImageCache, это свойство игнорируется.

    Если вы не устанавливаете свойство maxCacheAge SDImageCache, по умолчанию оно равно 604800 секундам (1 неделя).

  2. Есть ли в вашем приложении вызовы методов SDWebImage clearDisk или clearMemory? Если это так, установите на них точки останова, чтобы узнать, почему они вызываются во время возобновления работы.

  3. Если # 1 не объясняет это, и вы никогда не вызываете «очищающие» методы, лучше всего установить точку останова в [SDImageCache -cleanDisk] и пройти через нее, чтобы увидеть, почему ваш кеш очищается.
person Aaron Brager    schedule 17.07.2013
comment
Всегда вы на помощь со мной и эти проблемы с кэшированием. Хорошо, я сделаю это прямо сейчас и посмотрю, что происходит. - person NodeDad; 18.07.2013
comment
Я поставил несколько точек останова в основном везде, где вызывается метод очистки/очистки кеша, и ни один из них не сломался при нажатии кнопки «Домой» и возвращении в приложение, у меня нет мест в моем коде, где я вызывал бы его вручную. и все настройки там исходные настройки - person NodeDad; 18.07.2013
comment
Если точки останова не срабатывают, UIApplicationWillTerminateNotification, вероятно, не срабатывает - см. stackoverflow.com/q/7370853/1445366 чтобы он загорелся в симуляторе - person Aaron Brager; 18.07.2013
comment
Кроме того, единственная другая возможность заключается в том, что они вообще никогда не сохраняются на диск. (Вы также можете проверить это с помощью точек останова.) - person Aaron Brager; 18.07.2013
comment
Мне нужно переключиться на использование NSUserDefaults вместо класса MyClass с кучей методов, хранящих глобальные переменные, я думаю, пришло время откинуться на минутку и переосмыслить, как я это делаю. Все ваши предложения очень помогли и помогли мне узнать больше о том, как работает кэширование, и я собираюсь отложить это на минуту, пока мой мозг не взорвется. На данный момент я бы предпочел принять ваш ответ, поскольку он содержит так много информации. - person NodeDad; 19.07.2013