2

我的应用程序会定期在文件夹中转储一些内容。我已经使用下面的代码来计算我的应用程序消耗的总内存大小。但我看到它与我从设置\使用中看到的不同。我的代码显示的内存非常少。我无法跟踪我在计算中出错的地方/或者我错过了文件夹路径。

我计算了我的应用程序大小如下:

NSString *folderPath = [[NSBundle mainBundle] bundlePath];
NSArray *filesArray = [[NSFileManager defaultManager]      subpathsOfDirectoryAtPath:folderPath error:nil];
NSEnumerator *filesEnumerator = [filesArray objectEnumerator];
NSString *fileName;
unsigned long long int fileSize = 0;

while (fileName = [filesEnumerator nextObject]) {
NSDictionary *fileDictionary = [[NSFileManager defaultManager] attributesOfItemAtPath: [folderPath stringByAppendingPathComponent:fileName] error:nil];
fileSize += [fileDictionary fileSize];
};
4

1 回答 1

1

上面的代码返回实际的文件大小。设置/使用中显示的值显示分配的大小分配的大小应大于实际大小。

这就是为什么您的计算值和设置/使用值不匹配的原因。

如果您需要访问分配的文件大小,请在 NSURL 类中使用 NSURLTotalFileAllocatedSizeKey。NSFileManager类中没有可用的方法/属性来获取分配的大小[据我所知]。

请仔细阅读NSURL 类的文件属性键的详细信息。

仅供参考:如果您尝试访问sanboxed 应用程序主目录中的/Library/Caches/Snapshot文件夹,我们将收到权限错误。

这可能对您有帮助。

于 2015-03-31T10:56:21.910 回答