Swift 异步访问缓存大小

  • 异步查询过程
    //异步计算整个目录缓存大小
    class func  floderSizeAtPath(completion:@escaping (( _ fileSize:CGFloat)->Void)){
        DispatchQueue.global().async {
            var fileSize = CGFloat(0)
            if let floderPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.cachesDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first {
                let fineManager = FileManager.default
                if fineManager.isExecutableFile(atPath: floderPath) {
                    if let child = fineManager.subpaths(atPath: floderPath) {
                        var size = CGFloat(0)
                        for path in child {
                            let subStr = "\(floderPath)/\(path)"
                            let aSize =  fileSizeAtPath(filePath: subStr)
                            size = size + aSize
                        }
                        let allSize = size/(1024 * 1024)
                        fileSize = allSize
                    }else{
                        fileSize = CGFloat(0)
                    }
                }else {
                    fileSize = CGFloat(0)
                }
            }else{
                fileSize = CGFloat(0)
            }
            DispatchQueue.main.async {
                completion(fileSize)
            }
        }
    }
    class func fileSizeAtPath(filePath:String) -> CGFloat{
        let manager = FileManager.default
        if manager.isExecutableFile(atPath: filePath) {
            return CGFloat(0)
        }
        if let dic:[FileAttributeKey : Any] = try? manager.attributesOfItem(atPath: filePath) as  [FileAttributeKey : Any] {
            if let size =  dic[FileAttributeKey.size] as? Double {
                return CGFloat(size)
            }
        }
        return CGFloat(0)
    }
  • 异步清理过程
class func clearCache(completion:@escaping (()->Void)){
        DispatchQueue.global().async {
            if let floderPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.cachesDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first {
                let fineManager = FileManager.default
                if fineManager.isExecutableFile(atPath: floderPath) {
                    if  let subpaths  =  try?fineManager.contentsOfDirectory(atPath:floderPath) {
                        for subPath in subpaths {
                            let filePath = "\(floderPath)/\(subPath)"
                            try?fineManager.removeItem(atPath: filePath)
                        }
                    }
                }
            }
            DispatchQueue.main.async {
                completion()
            }
        }
        let storage = HTTPCookieStorage.shared
        if let cookies =  storage.cookies {
            for cookie  in cookies {
                storage.deleteCookie(cookie)
            }
        }
        let urlCache = URLCache.shared
        urlCache.removeAllCachedResponses()
        urlCache.diskCapacity = 0
        urlCache.memoryCapacity  = 0
    }

你可能感兴趣的:(Swift 异步访问缓存大小)