2022-08-30 iOS 获取设备剩余空间

- (long)freeDiskSpaceInBytes

{

    if(@available(iOS11.0, *)) {

        [NSURL alloc];

        NSURL* url = [[NSURL alloc]initFileURLWithPath:[NSString stringWithFormat:@"%@",NSHomeDirectory()]];

        NSError* error =nil;

        NSDictionary * dict = [urlresourceValuesForKeys:@[NSURLVolumeAvailableCapacityForImportantUsageKey]error:&error];

        if(error) {

            return0;

        }

        long long space = [dict[NSURLVolumeAvailableCapacityForImportantUsageKey] longLongValue];

        returnspace;

    }else{

        NSError * error =nil;

        NSDictionary * systemAttributes =  [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];

        if(error) {

            return0;

        }

        long long space = [systemAttributes[NSFileSystemFreeSize] longLongValue];

        returnspace;

    }

}

iOS11

iOS11 以后使用 NSHomeDirectory() 这种方式获取手机剩余空间总是不准,经测试差不多少 2G 左右,最后查文档后发现 iOS11 后苹果新增了 API。 所以 iOS11 以后需要使用新的 API 才能获取到真实的剩余空间,不过 BYTE 转换为 KB 的时候苹果使用的是 1000,而腾讯视频使用的是 1024。

The query type to use depends on what's being stored. If you’re storing data based on a user request or resources the app requires to function properly (for example, a video the user is about to watch or resources that are needed for the next level in a game), query against NSURLVolumeAvailableCapacityForImportantUsageKey. However, if you’re downloading data in a more predictive manner (for example, downloading a newly available episode of a TV series that the user has been watching recently), query against NSURLVolumeAvailableCapacityForOpportunisticUsageKey.

NSURLVolumeTotalCapacityKey获取到整个手机的存储空间,比如32G的手机获取的数据是32G;

NSURLVolumeAvailableCapacityKey 可用容量;

NSURLVolumeAvailableCapacityForImportantUsageKey 苹果建议如果下载视频或者游戏下一关的数据用这个,经调查发现系统中的剩余空间和腾讯视频使用的都是这个;

NSURLVolumeAvailableCapacityForOpportunisticUsageKey苹果建议如果您以更具预见性的方式下载数据(例如,下载最近使用的一个电视系列节目,用户最近一直在观看)。

你可能感兴趣的:(2022-08-30 iOS 获取设备剩余空间)