Как мы можем очистить кешированные изображения, когда мы закрываем приложение?

Я кэширую изображения в каталоге документов моего приложения, используя следующий код.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *saveDirectory = [paths objectAtIndex:0];

Но даже после того, как я закрою приложение, оно все еще там. Как я могу очистить его, когда я потеряю свое приложение. Я делаю все это в своем симуляторе.


person wolverine    schedule 09.12.2009    source источник


Ответы (4)


Я бы реализовал applicationWillTerminate: в своем делегате приложения и удалил бы там файлы кеша. Или еще лучше, как предложил Владимир, сохранить их во временной директории и позволить ОС очистить их, когда это необходимо.

- (void)applicationWillTerminate:(UIApplication *)app
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *cacheFiles = [fileManager contentsOfDirectoryAtPath:saveDirectory error:error];
    for (NSString *file in cacheFiles) {
        error = nil;
        [fileManager removeItemAtPath:[saveDirectory stringByAppendingPathComponent:file] error:error];
        /* handle error */
    }
}
person hallski    schedule 09.12.2009
comment
Под временным каталогом вы подразумеваете tmp, присутствующий в папке поддержки приложения для приложения? Если да, то как я могу получить к нему доступ? NSDcocumentDirectory получит папку документов. - person wolverine; 09.12.2009
comment
Я имел в виду NSTemporaryDirectory(), как было предложено выше. Ответил там на ваш вопрос о том, почему вещи не были удалены. - person hallski; 09.12.2009

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

Если вы хотите вручную удалить файлы, вы должны сохранить пути для них и использовать следующую функцию NSFileManager:

- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error

Редактировать: извините, я ошибся насчет автоматического удаления. Вот цитата из Руководства по разработке:
Используйте этот каталог для записи временных файлов, которые вам не нужно сохранять между запусками вашего приложения. Ваше приложение должно удалять файлы из этого каталога, когда оно определяет, что они больше не нужны. (Система также может удалять устаревшие файлы из этого каталога, когда ваше приложение не запущено.)

person Vladimir    schedule 09.12.2009
comment
Но как сохранить мой файл во временный каталог? - person wolverine; 09.12.2009
comment
NSString *saveDirectory = NSTemporaryDirectory(); а затем сохраните свой файл там, как и для любого другого пути. - person Vladimir; 09.12.2009
comment
Я пробовал это до сих пор. Но он не удаляется, когда я закрываю приложение. Он до сих пор там присутствует. - person wolverine; 09.12.2009
comment
Я предполагаю, что они будут удалены, когда ОС потребуется больше места (или после перезагрузки телефона). Это просто означает, что вы можете игнорировать их, если вы хотите убедиться, что они действительно удалены, вам нужно сделать что-то подобное, как это предлагается в других ответах. - person hallski; 09.12.2009
comment
Симулятор никогда не удалит файлы во временном пути, потому что в этом нет необходимости. Устройство будет, в конце концов, если это необходимо. - person Kendall Helmstetter Gelner; 09.12.2009

Используйте путь к временному каталогу, как указано в этом вопросе:

Как я могу получить доступный для записи путь на iPhone?< /а>

person Kendall Helmstetter Gelner    schedule 09.12.2009

person    schedule
comment
Неплохо. Попробую и этот. - person wolverine; 09.12.2009