清理缓存

清理缓存有两种方式,一种是使用SDWebImage第三方库自带的方法,这种方式简单,但是只能清理由SDWebImage或者Kingfisher缓存的图片,还有一种方式是找到缓存目录,沙盒目录下的Library/Caches下的文件逐个删除,这种方式可以彻底清理缓存

Demo

import UIKit

//清理缓存:阅读类,购物类等的标配功能
//步骤
//1.计算缓存大小
//2.分别清除缓存文件夹下每个子文件

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    
    
    //沙盒目录
    @IBAction func LibraryCacheClear(sender: AnyObject) {
        //获取缓存文件路径 - Library/Cache
        let cachePath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true).first
        
        //print(cachePath)
        
        //定义变量用于计算所有子文件的大小
        var size = Double()
        
        //获取Caches文件夹下所有文件
        //NSFileManager系统文件管理类
        let fileArray = NSFileManager.defaultManager().subpathsAtPath(cachePath!)
        
        //遍历数组计算每个字文件的大小
        for fileName in fileArray!{
            //拼接每个子文件的路径
            let filePath = cachePath?.stringByAppendingString("/\(fileName)")
            //获取每个子文件的属性
            do {
                let fileAttribute = try NSFileManager.defaultManager().attributesOfItemAtPath(filePath!)
                
                //print(fileAttribute)
                
                for (fileAtt,fileSize) in fileAttribute{
                    if fileAtt == NSFileSize{
                        //计算大小
                        size += fileSize.doubleValue //单位为字节
                    }
                }
            }catch{}
        }
        
        
        //提示框--保留小数点后两位,单位需要为M
        let message = String(format: "清除%.2fM缓存", size / 1024 / 1024)
        let alertVC = UIAlertController(title: "提示", message: message, preferredStyle: .Alert)
        let conforAction = UIAlertAction(title: "确定", style: .Default) { (action) in
            
            for fileName in fileArray!{
                let filePath = cachePath?.stringByAppendingString("/\(fileName)")
                //当前路径下文件存在的情况下
                if NSFileManager.defaultManager().fileExistsAtPath(filePath!){
                    //清除
                    do {
                        try NSFileManager.defaultManager().removeItemAtPath(filePath!)
                    }catch{
                        
                    }
                }
                
            }
            
        }
        let cancelAction = UIAlertAction(title: "取消", style: .Default, handler: nil)
        alertVC.addAction(conforAction)
        alertVC.addAction(cancelAction)
        self.presentViewController(alertVC, animated: true, completion: nil)
    }
    
    
    
    //sdweb或者kinfisher
    //只能清除通过自己缓存的东西
    //名字不能为SDImageCache
    @IBAction func SDWebImageClear(sender: AnyObject) {
        
        //获取由SDWebImage缓存的文件大小
        let size = SDImageCache.sharedImageCache().getSize()
        
        //清理内存中的缓存
        SDImageCache.sharedImageCache().clearMemory()
        //清理沙盒目录下的缓存
        SDImageCache.sharedImageCache().cleanDisk()//或者clearDisk()
    }
}

你可能感兴趣的:(清理缓存)