Управление размером каталога tmp в песочнице приложения iPhone для кэширования изображений

У меня есть приложение для iPhone с довольно большим количеством изображений, и я хочу хранить удаленно загруженные изображения локально в каталоге tmp песочницы приложения, чтобы избежать ненужных сетевых запросов. Есть ли ограничение на общий размер файлов, хранящихся в каталогах приложения, или приложение должно управлять этим? Как приложение определит размер файлов в каталоге tmp?

Кроме того, если приложению необходимо управлять размером кеша, я хотел бы реализовать какую-то политику кеширования, чтобы определять, какие файлы становятся недействительными. Как бы я это сделал? Если я хочу реализовать базовую политику кэширования LRU - аннулировать файлы, которые использовались не так давно, - мне кажется, что мне нужно будет хранить счетчики доступа для каждого изображения и хранить их на диске, что кажется довольно забавным. Я полагаю, что простой политикой управления размером было бы просто полностью очищать кеш каждый раз, когда приложение завершает работу.

Кроме того, в чем разница между использованием каталога из NSCachesDirectory и NSTemporaryDirectory? В документации Apple упоминается и то, и другое, но не говорится о том, какой из них использовать для какого типа файлов. Я думаю, что NSTemporaryDirectory больше похож на каталог Unix / var / tmp и используется для эфемерных данных, которые можно стереть в любое время. Мне кажется, что NSCachesDirectory больше подходит для хранения кэшированных изображений, поскольку файлы могут понадобиться в нескольких жизненных циклах приложений.


person pmc255    schedule 19.09.2010    source источник
comment
Есть ли причина, по которой NSURLCache не соответствует требованиям? Я сам занимаюсь проблемами кэширования изображений и хотел бы понять, насколько полезен NSURLCache как решение, которое не требует полномасштабного пользовательского хранилища данных LRU или LRU-ish.   -  person Yetanotherjosh    schedule 21.12.2010


Ответы (1)


Все временные каталоги являются локальными для вашего приложения; любой из них будет работать, и нет никаких искусственных ограничений на размер их содержимого.

Политика постоянного кэширования LRU должна быть достаточной и относительно простой в реализации.

person rpetrich    schedule 19.09.2010
comment
Вот с чем я собираюсь. Для любопытных - я также использую атрибут NSFileModificationDate для каждого файла для принудительного кэширования LRU. - person pmc255; 20.09.2010
comment
NSFileModificationDate отслеживает, когда файл был изменен, а не когда он использовался в последний раз. Обычно можно использовать stat и поле st_atime для проверки времени последнего доступа к файлу, но iPhone монтирует пользовательский раздел с набором параметров noatime, поэтому встроенного способа отслеживания этой информации нет. Сверни свой :) - person rpetrich; 21.09.2010