以下是我用来获取 iOS 设备上应用程序的可用存储空间的方法:
NSDictionary *dict = [[NSFileManager defaultManager] fileSystemAttributesAtPath:@"/var"];
NSNumber *freeSpace = [dict valueForKey:@"NSFileSystemFreeSize"];
Run Code Online (Sandbox Code Playgroud)
但是,该值freeSpace与“设置”应用程序中显示的值不符。该值始终大于“设置”显示的值。例如,freeSpace大约为 600,000,000 字节,其中“设置”显示 357 MB。
这是为什么?如何获得与“设置”显示的值相同的值?
在 iOS 11 中,可以传递新的音量容量键,URL.resourceValues(forKeys:)以提供与设备设置中可用的值相匹配的值。
static let volumeAvailableCapacityKey: URLResourceKey\n卷\xe2\x80\x99s 可用容量的键(以字节为单位)(只读)。
static let volumeAvailableCapacityForImportantUsageKey: URLResourceKey\n卷的键\xe2\x80\x99s 用于存储重要资源的可用容量(以字节为单位)(只读)。
static let volumeAvailableCapacityForOpportunisticUsageKey: URLResourceKey\n卷\xe2\x80\x99s 用于存储非必需资源的可用容量(以字节为单位)的键(只读)。
static let volumeTotalCapacityKey: URLResourceKey\n卷\xe2\x80\x99s 总容量的键(以字节为单位)(只读)。
来自苹果的文档:
\n\n\n概述
\n在尝试在本地存储大量数据之前,请首先验证您是否有足够的存储容量。要获取卷的存储容量,您可以构造一个引用要查询的卷上的对象的 URL(使用 URL 的实例),然后查询该卷。
\n决定使用哪种查询类型
\n使用的查询类型取决于存储的内容。如果您\xe2\x80\x99根据用户请求或应用程序正常运行所需的资源存储数据(例如,用户将要观看的视频或游戏中下一个级别所需的资源),请查询反对
\nvolumeAvailableCapacityForImportantUsageKey。但是,如果您\xe2\x80\x99 以更具预测性的方式下载数据(例如,下载用户最近观看过的电视剧的新剧集),请查询volumeAvailableCapacityForOpportunisticUsageKey.构造一个查询
\n使用此示例作为构建您自己的查询的指南:
\n
let fileURL = URL(fileURLWithPath:"/")\ndo {\n let values = try fileURL.resourceValues(forKeys: [.volumeAvailableCapacityForImportantUsageKey])\n if let capacity = values.volumeAvailableCapacityForImportantUsage {\n print("Available capacity for important usage: \\(capacity)")\n } else {\n print("Capacity is unavailable")\n }\n} catch {\n print("Error retrieving capacity: \\(error.localizedDescription)")\n}\nRun Code Online (Sandbox Code Playgroud)\n