gpt4 book ai didi

objective-c - iOS 在缓存目录中存储文件一段时间

转载 作者:行者123 更新时间:2023-11-28 20:39:38 24 4
gpt4 key购买 nike

我们有一个 POS 公寓租赁 iPad 应用程序,用于收集有关用户及其兴趣的大量数据(当然是在他们知情的情况下)。

我们使用 RestKit 将 CoreData 与服务器同步,这非常棒。

我在缓存目录中使用文本文件来存储他们与访客卡片交互的历史记录,以便在出现错误时可以提交,或者通过电子邮件发送给我们,以重新创建任何访客卡片以防万一某种同步问题。

虽然这些应该是非常小的文本文件,大概 1-3k 左右,但我觉得我最终应该从缓存目录中清除它们。 (当我打字时,也许它太小了我不应该担心)。

我很好奇是否有任何方法可以在设定的时间后从缓存目录中清除文件?说 90 天左右?

最佳答案

有消息称,如果您使用经过批准的 NSCachesDirectory 位置,如果操作系统需要该空间,它将删除该目录中的内容。我从来没有真正看到它在实践中发生,但我听说过这样的事情(这是有道理的,否则为什么要为缓存文件设置特殊的、操作系统认可的位置。)

也就是说,这个任务听起来很简单。只需启动一个低优先级的 GCD 后台 block 来遍历该目录中的文件并删除所有创建日期超过 90 天的文件。如果您只关心数据是在多长时间前创建的(而不是您上次访问数据,如果不自己跟踪就很难确定),这真的很容易。NSFileManager 是您的 friend .像这样的东西应该可以工作:

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 天不访问它就删除它”并让它为您跟踪它,我不会相信存在这样的机制。

关于objective-c - iOS 在缓存目录中存储文件一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9151827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com