Слово на улице заключается в том, что если вы используете санкционированное расположение NSCachesDirectory, если ОС требуется это место, оно удалит вещи, которые находятся в этом каталоге. Я на самом деле никогда не видел, чтобы это происходило на практике, но я слышал такие вещи (и это понятно), иначе зачем беспокоиться о специальном, разрешенном ОС расположении для файлов кэша.)
Тем не менее, это задание звучит довольно просто. Просто включите низкоприоритетный фоновый блок GCD, чтобы перебрать файлы в этом каталоге и удалить все, чья дата создания была> 90 дней назад. Это действительно легко, если вы заботитесь только о том, как давно были созданы данные (в отличие от того, когда вы в последний раз обращались к данным, которые сложнее определить, не отслеживая себя.) NSFileManager - ваш друг здесь. Как-то так должно работать:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
NSFileManager* fm = [NSFileManager defaultManager];
NSMutableArray* urlsToDelete = [NSMutableArray array];
for (NSURL* dirUrl in [fm URLsForDirectory: NSCachesDirectory inDomains:NSUserDomainMask])
{
NSDirectoryEnumerator* dirEnum = [fm enumeratorAtURL: dirUrl
includingPropertiesForKeys: [NSArray arrayWithObject: NSFileModificationDate]
options: 0
errorHandler: ^(NSURL* a, NSError* b){ return (BOOL)YES; }];
NSURL* url = nil;
while ((url = [dirEnum nextObject]))
{
NSDate* modDate = [[dirEnum fileAttributes] objectForKey: NSFileModificationDate];
if (modDate && [[NSDate date] compare: [modDate dateByAddingTimeInterval: 60 * 60 * 24 * 90]] == NSOrderedDescending)
{
[urlsToDelete addObject: url];
}
}
}
for (NSURL* url in urlsToDelete)
{
[fm removeItemAtURL: url error: NULL];
}
});
Чтобы уточнить, если вы ищете какой-то механизм, с помощью которого ОС может сказать: «удалите это, если я не получаю к нему доступ более 90 дней», и чтобы оно отслеживало это для вас, я не полагаю, что такой механизм существует.