密钥volumeAvailableCapacityKey,volumeAvailableCapacityForImportantUsageKey和volumeAvailableCapacityForOpportunisticUsageKey之间的差异

时间:2018-04-11 13:01:28

标签: ios swift

在将某个文件下载到我的应用程序之前,我正在尝试获取可用磁盘空间。在iOS 11我按照以下方式执行此操作

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)

        if #available(iOS 11.0, *) {
            // Running iOS 11 OR NEWER
            let pathURL = URL(fileURLWithPath:paths.last!)
            do {
                let values = try pathURL.resourceValues(forKeys: [.volumeAvailableCapacityKey])
                if let capacity = values.volumeAvailableCapacityForImportantUsage {
                    return capacity;
                } else {
                    return nil;
                }
            } catch {
                return nil
            }
        }  

现在我的问题是 -

volumeAvailableCapacityKeyvolumeAvailableCapacityForImportantUsageKeyvolumeAvailableCapacityForOpportunisticUsageKey之间有什么区别?我应该使用什么来获取设备中的实际可用空间?

1 个答案:

答案 0 :(得分:1)

根据Apple文档:

  

<强> volumeAvailableCapacityKey
  卷的可用容量的密钥(以字节为单位)(只读)

     

<强> volumeAvailableCapacityForImportantUsageKey
  用于存储重要数据的卷的可用容量(以字节为单位)的键   资源(只读)

     

<强> volumeAvailableCapacityForOpportunisticUsageKey   用于存储非必要资源的卷的可用容量(以字节为单位)的密钥(只读)

     

<强> volumeTotalCapacityKey
  卷的总容量的密钥(以字节为单位)   (只读)

我建议你仔细阅读Apple doc。它强调:

  

概述

     

在尝试在本地存储大量数据之前,请先验证您是否有足够的存储容量。要获取卷的存储容量,请构造一个URL(使用URL实例),该URL引用要查询的卷上的对象,然后查询该卷。

     

决定使用哪种查询类型

     

要使用的查询类型取决于要存储的内容。如果您根据应用程序需要正常运行的用户请求或资源来存储数据(例如,用户即将观看的视频或游戏中下一级所需的资源),请查询{{1 }}。但是,如果您以更具预测性的方式下载数据(例如,下载用户最近一直在观看的电视连续剧的新可用剧集),请查询volumeAvailableCapacityForImportantUsageKey

确实是一个非常有趣的例子:

volumeAvailableCapacityForOpportunisticUsageKey