iOS开发清除缓存

一般我们对清除缓存操作涉及主要是对网络请求的图片进行清除,

首先要知道图片的缓存路径,一般放在沙盒路径的 document 文件夹里,具体查询方法见文章《IOS中获取各个文件的目录路径的方法和NSFileManager类》,改文章还涉及了如何拿到指定文件夹下的所有文件名称,从而根据文件名称清除所有要清楚的文件。。。

至于其他关于缓存的机制的知识点,文章《iOS开发缓存:内存缓存》,《iOS开发缓存:本地缓存》简单介绍了



iOS 开发中,清除缓存通常指的是清除应用运行过程中产生的临时数据,例如图片缓存(如使用 `SDWebImage` 或 `Kingfisher`)、URL 缓存(`URLCache`)、文件缓存(保存在 `Caches` 目录下的文件)等。下面我将详细介绍如何在 **Swift** 中实现清除这些常见类型的缓存,并提供完整代码示例。 --- ### ✅ 1. 清除 `URLCache`(NSURLSession / URLSession 的缓存) 系统会自动缓存通过 `URLSession` 下载的网络请求内容,可以通过以下方式清空: ```swift // 清除内存和磁盘上的 URL 缓存 URLCache.shared.removeAllCachedResponses() ``` 你也可以分别清除内存和磁盘缓存: ```swift let urlCache = URLCache.shared urlCache.memoryCapacity = 0 // 清除内存缓存(设为0触发释放) urlCache.diskCapacity = 0 // 同样方式清除磁盘容量 URLCache.shared = urlCache // 或者更直接地调用: URLCache.shared.removeAllCachedResponses() ``` --- ### ✅ 2. 清除图片缓存(以 SDWebImage 为例) 如果你使用了第三方库 [SDWebImage](https://github.com/SDWebImage/SDWebImage),可以这样清除缓存: ```swift import SDWebImage // 清除内存和磁盘上的图片缓存 SDImageCache.shared.clearMemory() SDImageCache.shared.clearDisk { print("SDWebImage 磁盘缓存清除") } // 可选:重新设置缓存大小 // SDImageCache.shared.config.maxDiskAge = ... // 控制过期时间 ``` > ⚠️ 注意:`clearDisk` 是异步操作,建议在完成后提示用户或刷新界面。 --- ### ✅ 3. 删除 Caches 目录下的自定义缓存文件 很多开发者会把下载的文件、日志、数据库备份等存在 `Caches` 目录下。你可以手动删除该目录中的所有内容: ```swift func clearCachesDirectory() { let fileManager = FileManager.default guard let cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first else { return } do { let files = try fileManager.contentsOfDirectory(at: cachesURL, includingPropertiesForKeys: nil) for fileURL in files { try fileManager.removeItem(at: fileURL) } print("Caches 目录已清空") } catch { print("清除 Caches 失败: $error)") } } ``` ⚠️ 注意事项: - 不要删除整个 `Caches` 文件夹本身,只删里面的内容。 - 此目录的内容不会计入“iTunes存储空间”,但会被系统在低存储时自动清理。 --- ### ✅ 4. 完整示例:一键清除所有缓存 ```swift func clearAllAppCache() { // 1. 清除 URL 缓存 URLCache.shared.removeAllCachedResponses() // 2. 清除 SDWebImage 图片缓存(如有) #if canImport(SDWebImage) SDImageCache.shared.clearMemory() SDImageCache.shared.clearDisk {} #endif // 3. 清除自定义缓存文件(Caches 目录) clearCachesDirectory() print("✅ 所有缓存清除") } ``` 你可以把这个功能绑定到一个按钮上用于调试,或者在设置页中提供“清除缓存”选项。 --- ### ✅ 5. 显示当前缓存大小(可选增强体验) ```swift func getCacheSizeInMB() -> Double { let fileManager = FileManager.default var cacheSize: UInt64 = 0 // 获取 Caches 目录 guard let cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first else { return 0 } do { let files = try fileManager.contentsOfDirectory(at: cachesURL, includingPropertiesForKeys: [.fileSizeKey]) for file in files { if let values = try? file.resourceValues(forKeys: [.fileSizeKey]), let fileSize = values.fileSize { cacheSize += UInt64(fileSize) } } } catch { print("获取缓存大小失败: $error)") } // 转换为 MB return Double(cacheSize) / 1024 / 1024 } ``` 然后显示给用户: ```swift let size = String(format: "%.2f MB", getCacheSizeInMB()) print("当前缓存大小: $size)") ``` --- ### ✅ 总结说明 | 类型 | 是否需要手动清除 | 方法 | |------|------------------|------| | `URLCache` | 是 | `URLCache.shared.removeAllCachedResponses()` | | 图片缓存(SDWebImage) | 是 | `SDImageCache.shared.clearDisk()` | | 自定义缓存文件 | 是 | 遍历 `Caches` 目录并删除 | | `Documents` 目录 | ❌ 不推荐随意删 | 除非是明确可再生的数据 | > 📝 提示:iOS 应用不应频繁弹出“清理缓存”提示,合理控制缓存策略(如最大容量、过期机制)更重要。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值