Каковы некоторые политики автоматического удаления NSCache? Документация Apple не упоминает их, и я экспериментально обнаружил, что NSCache не отвечает на предупреждение о памяти.Политика автоматического удаления NSCache
ответ
Лучше всего обрабатывать NSCache
как черный ящик, насколько это возможно.
От Caching and Purgeable Memory (курсив мой):
При добавлении элементов в кэше, вы можете указать значение затрат, которые будут связаны с каждой парой ключ-значение. Вызовите метод
setTotalCostLimit:
, чтобы установить максимальное значение для суммы всех затрат на кешированные объекты. Таким образом, когда добавляется объект, который толкаетtotalCost
вышеtotalCostLimit
, кеш может автоматически вытеснить некоторые из его объектов, чтобы вернуться ниже порога. Этот процесс выселения не гарантируется, поэтому попытка манипулирования значениямиcost
для достижения определенного поведения может нанести ущерб производительности кэша. Pass в0
дляcost
, если у вас есть ничего полезного, или использоватьsetObject:forKey:
метод, который не требует затрат, которые передаются в. Примечание: предельное число и предел совокупной стоимости не являются строго соблюдается. То есть, когда кеш переходит на один из его пределов, некоторые из его объектов могут быть выселены немедленно, позже или никогда, все в зависимости от деталей реализации кэша.
NSCache
не реагирует на UIApplicationDidReceiveMemoryWarningNotification
, но она автоматически выселить его объекты в условиях плохой памяти, очевидно, с помощью какой-то другой механизм.
Хотя я ранее предлагал наблюдать UIApplicationDidReceiveMemoryWarningNotification
, это не тот случай. Никакой специальной обработки для ситуаций с низкой памятью не требуется, так как NSCache
обрабатывает это автоматически.
Update:
С прошивкой 7, NSCache
не только не реагирует на предупреждения памяти, но она также не появляется, чтобы должным образом очистить себя от давления памяти, либо (см NSCache crashing when memory limit is reached (only on iOS 7)).
I подкласс NSCache
UIApplicationDidReceiveMemoryWarningNotification
наблюдать и очистить кэш, на предупреждение памяти:
@interface AutoPurgeCache : NSCache
@end
@implementation AutoPurgeCache
- (id)init
{
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeAllObjects) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
}
return self;
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
// if not ARC, also
//
// [super dealloc];
}
@end
- 1. Автоматического обновления политика Подписки Возврат
- 2. quartz.net автоматического удаления триггера
- 3. objc_setAssociatedObject с nil для удаления - проверяется политика?
- 4. Hive временная таблица автоматического удаления
- 5. Текстовая область с функцией автоматического удаления и удаления
- 6. Свойство имени NSCache
- 7. NSCache и фон
- 8. UIView in NSCache overriden
- 9. NSCache с сотнями изображений
- 10. NSCache сбой приложения
- 11. NSCache - не всегда очищается?
- 12. Подкласс NSCache - приложение Singleton
- 13. Сохранение содержимого NSCache
- 14. ошибка в реализации nscache
- 15. NSCache в MKTilelOverlay
- 16. NSCache не работает
- 17. Политика конфиденциальности Политика конфиденциальности
- 18. Использование LINQ для автоматического удаления дочерних записей
- 19. Задача задачи автоматического удаления базы данных
- 20. Элемент автоматического удаления в двойном списке ссылок
- 21. jQuery Draggable Помощник остановки автоматического удаления
- 22. AWK Баш команда автоматического удаления пробельные
- 23. stompjs + rabbitmq - создавать очереди автоматического удаления
- 24. MSSQL дата записи/время автоматического удаления
- 25. IOS cocoapods - Причины для автоматического удаления стручков
- 26. Сценарий автоматического удаления папок в другой папке
- 27. Facebook Политика конфиденциальности Политика конфиденциальности
- 28. NSCache() не работает должным образом
- 29. Когда NSCache освобождает объекты кешей?
- 30. NSCache, релиз изображения, асинхронная очередь
это хорошая идея, чтобы наблюдать на предупреждение памяти и очистить кэш тогда? –
@EvilNodoer Проведя некоторые эксперименты, я обнаружил, что, хотя он не отвечает на 'UIApplicationDidReceiveMemoryWarningNotification', он фактически автоматически вытесняет свои объекты в ситуациях с низкой памятью (должен использовать какой-то другой механизм). – Rob
@EvilNodoer BTW, я должен убрать свой комментарий о 'NSCache', реагирующем на давление памяти, поскольку это изменилось в iOS 7. Наблюдение' UIApplicationDidReceiveMemoryWarningNotification' было бы разумным. См. Http://stackoverflow.com/questions/19546054/nscache-crashing-when-memory-limit-is-reached-only-on-ios-7 – Rob