报亭内存存储问题,如何获取应用缓存目录?
Posted
技术标签:
【中文标题】报亭内存存储问题,如何获取应用缓存目录?【英文标题】:newsstand memory storage issue, how do i get the app cache directory? 【发布时间】:2014-04-22 16:11:08 【问题描述】:我有一个报亭应用程序,其中包含杂志并使用报亭框架。我意识到删除杂志和/或下载杂志时出了点问题,因为当我访问设置/使用时,我的应用程序在下载和删除同一杂志时内存使用量不断增长。 发现问题...在委托方法中下载问题时:
-(void)connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *)destinationURL
我只需要在最后添加类似这样的内容:
NSError *error;
[[NSFileManager defaultManager] removeItemAtPath:[destinationURL path] error:&error];
if (error)
NSLog(@"ERROR:%@", error);
即使目录被称为“缓存”,您也需要手动删除。好的问题解决了,但是那些已经下载了我的应用程序并且在缓存目录中有大量 MB 的客户呢?
我想知道如何获取此目录并在启动时删除其中的所有内容,并且只删除一次...
我只能使用NSUserdefault
执行一次,但是如何获取此目录并删除其中的任何 zip 文件...此目录和其中的文件的示例是:
/private/var/mobile/Applications/1291CC20-C55F-48F6-86B6-B0909F887C58/Library/Caches/bgdl-280-6e4e063c922d1f58.zip
但此路径因设备而异。我想在发布时执行此操作,因此我确定没有正在进行的下载,但欢迎任何其他解决方案,提前致谢。
【问题讨论】:
【参考方案1】:您需要做的就是枚举 Caches 目录中的所有文件并删除具有 zip 扩展名的文件:
- (void)removeZipFilesFromCachesDirectory
static NSString *const kZIPExtension = @"zip";
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *cachesDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSError *error = nil;
NSArray *fileNames = [fileManager contentsOfDirectoryAtPath:cachesDirectoryPath error:&error];
if (error == nil)
for (NSString *fileName in fileNames)
NSString *filePath = [cachesDirectoryPath stringByAppendingPathComponent:fileName];
if ([filePath.pathExtension.lowercaseString isEqualToString:kZIPExtension])
NSError *anError = nil;
[fileManager removeItemAtPath:filePath error:&anError];
if (anError != nil)
NSLog(@"%@", anError);
else
NSLog(@"%@", error);
【讨论】:
似乎很有希望。在我对其进行测试后,如果它有效,您将获得奖励;) 谢谢兄弟,完美无瑕。我会尽快奖励赏金。但是我仍然有 100 MB 的使用量(设置/使用/myapp),并且我在调试时检查了缓存目录中的文件大小都小于 1MB。任何想法可能是什么?核心数据可能(我保存图像的 NSData)?但在全新安装中,使用量约为 40 MB(在 sqlite 中使用相同的数据) @user2387149 你能在模拟器中运行应用程序吗?在这种情况下,您可以看到所有与应用程序相关的目录及其内容。此外,某些数据可能存储在 Documents 目录中,而不仅仅是 Caches。 我想到了,但由于这个错误,我无法在模拟器中运行它:ld: symbol(s) not found for architecture i386 "_OBJC_CLASS_$_CATiledLayer",引用自:objc- TiledPDFView.o 中的类引用:/ @user2387149 似乎您使用的 lib 不是为 i386(模拟器)架构编译的。尝试在 google 中找到 i386 的这个库。以上是关于报亭内存存储问题,如何获取应用缓存目录?的主要内容,如果未能解决你的问题,请参考以下文章