swift APP缓存

这里的APP缓存是指Cache文件夹里的内容,iOS系统从iOS 10开始就支持系统自动清理功能了。

建议重要的内容不要放到 Cache文件夹中。

一、获取缓存

复制代码
/// 获取缓存大小
    public static func getCacheSize() -> String {
        let folderPath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first ?? ""
        let manager = FileManager.default
        guard let files = manager.subpaths(atPath: folderPath)
        else {
            return "0.0B"
        }
        var folderSize = 0.0
        for path in files {
            let temPath: String = folderPath + "/" + path
            let folder = try? manager.attributesOfItem(atPath: temPath) as NSDictionary
            if let c = folder?.fileSize() {
                folderSize += Double(Float(c))
            }
        }
        // 保留2位小数
        if folderSize > 1024 * 1024 {
            return String(format: "%.2f", Double(folderSize)/1024.0/1024.0) + "MB"
        } else if folderSize > 1024 {
            return String(format: "%.2f", Double(folderSize)/1024.0) + "KB"
        } else {
            return String(folderSize) + "B"
        }
    }

二、清除缓存

复制代码
/// 清理缓存
    public static func cleanCache(_ block: (() -> Void)?) {
        DispatchQueue.global().async {
            // 文件路径
            let folderPath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first ?? ""
            if let files = FileManager.default.subpaths(atPath: folderPath) {
                for path in files {
                    let temPath: String = folderPath + "/" + path
                    if FileManager.default.fileExists(atPath: temPath) == true {
                        try? FileManager.default.removeItem(atPath: temPath)
                    }
                }
            }
            // 返回主线程
            DispatchQueue.main.async {
                if let block = block {
                    block()
                }
            }
        }
    }

三、清除网页缓存

复制代码
/// 清除网页缓存
    public static func cleanWebCache() {
        let types = [WKWebsiteDataTypeMemoryCache, WKWebsiteDataTypeDiskCache]
        let websiteDataTypes = Set(types)
        let dateFrom = Date(timeIntervalSince1970: 0)
        WKWebsiteDataStore.default().removeData(ofTypes: websiteDataTypes, modifiedSince: dateFrom) {
            
        }
    }
相关推荐
叫Guava不是瓜娃15 小时前
我用 Swift 写了个本地语音输入:按住说话,松开就是整理好的文字(开源)
swift
Chenyu_3101 天前
DPDK、TC 和 XDP:Linux 高性能网络到底在优化什么
linux·服务器·网络·缓存
Yannik2 天前
iOS Swift Package Manager(SPM)私有组件完整实操
ios·swift
hflmwl82 天前
RedisDesktopManager安装包中文版官方下载,redis可视化客户端工具下载
数据库·redis·缓存·可视化客户端工具
一枕槐安4872 天前
大模型应用后端设计:上下文管理、缓存、降级策略的工程方案总结
java·spring·缓存
我就是不信2 天前
Swift 方法派发机制详解
开发语言·ios·swift
梦想平凡2 天前
棋牌游戏技术实战(十三):缓存对局历史时控制容量,命中以后仍然检查成员权限
游戏·缓存
我不会起名字3222 天前
Redis 从 0 到 1(十一):缓存穿透/击穿/雪崩三连击,Go 3 套防御代码
redis·缓存·go·布隆过滤器·雪崩
Chenyu_3102 天前
NUMA 基础:从 CPU、内存到 Node 的整体理解
linux·服务器·网络·缓存
土豆.exe2 天前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存