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) {
            
        }
    }
相关推荐
Alan_69114 小时前
商品详情优化三板斧-拆分-多级缓存-GC调参
后端·缓存
難釋懷16 小时前
Nginx-proxy缓存断点续传缓存 range
运维·nginx·缓存
杨运交18 小时前
[053][核心模块]Java枚举缓存与ORM集成实践
java·开发语言·缓存
liulilittle1 天前
LLM推理中的KV缓存与跨请求前缀复用:机制、条件与提示词
缓存·ai·llm
软泡芙1 天前
【IOS】 Swift Package Manager (SPM) 指南
网络·ios·swift
智码看视界1 天前
Day33-数据层 × 中间件AI化篇:Redis缓存经典问题-击穿、穿透、雪崩的终极解决方案
数据库·redis·缓存·中间件·穿透·雪崩·击穿
難釋懷1 天前
Nginx-proxy缓存清理
运维·nginx·缓存
东坡肘子1 天前
不是模型变慢了,是任务变大了 -- 肘子的 Swift 周报 #146
人工智能·swiftui·swift
咩咩啃树皮1 天前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
大龄秃头程序员2 天前
Sendable 不是“能跑就行”:Swift Concurrency 下的实战踩坑与架构落地指南
swift