iOS-缓存文件时间

不积跬步,无以至千里
不积小流,无以成江海

  • .m文件
static ZSWCache * cache = nil;
/*
 单例
 */
// 单例方法
+ (ZSWCache *)shareInstence{
    @synchronized(self){
        if (cache == nil) {
            cache = [[ZSWCache alloc] init];
        }
        return cache;
    }
}
// 保证分配了空间,不会出错
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
    @synchronized(self){
        if (cache == nil) {
            cache = [super allocWithZone:zone];
        }
        return cache;
    }
}
  • 根据接口不同保存文件 保存的是请求下来的data
-(void)saveWithData:(NSData *)data andNameString:(NSString *)urlString{
    // 设置缓存路径
    NSString * path = [NSString stringWithFormat:@"%@/Documents/Cache/",NSHomeDirectory()];
    // 根据路径创建文件
    NSFileManager * mangager = [NSFileManager defaultManager];
    BOOL ret = [mangager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
    if (ret) {
        NSLog(@"创建缓存路径成功");
    }else{
        NSLog(@"创建缓存路径失败");
    }
    // 根据接口加密保存文件,区分文件
    urlString = [urlString MD5Hash];
    // 根据接口拼接每个界面的缓存文件的路径
    NSString * cacheFilePath = [NSString stringWithFormat:@"%@%@",path,urlString];
    BOOL isWrite = [data writeToFile:cacheFilePath atomically:YES];
    if (isWrite) {
        NSLog(@"写入缓存成功");
    }else{
        NSLog(@"写入缓存失败");
    }
}
  • 读取
-(NSData *)getDataWithNameString:(NSString *)urlString{
    // 根据接口获取路径
    urlString = [urlString MD5Hash];
    NSString * path = [NSString stringWithFormat:@"%@/Documents/Cache/%@",NSHomeDirectory(),urlString];
    // 判断路径是否存在
    NSFileManager * manager = [NSFileManager defaultManager];
    if (![manager fileExistsAtPath:path]) {
        return nil;
    }
    // 根据缓存时间,判断是否需要重新请求
    NSTimeInterval timeInterval = [[NSDate date] timeIntervalSinceDate:[self getLastWithFileDate:path]];
    if (timeInterval > 1) {
        return nil;
    }
    // 存在缓存,读取缓存
    NSData * data = [NSData dataWithContentsOfFile:path];
    return data;
}
  • 获取本地缓存文件的最后写入时间
-(NSDate *)getLastWithFileDate:(NSString *)path{
    NSFileManager * manager = [NSFileManager defaultManager];
    // 获取制定的路径的下面的文件的最后修改时间属性,并返回
    NSDictionary * dic = [manager attributesOfItemAtPath:path error:nil];
    return dic[NSFileModificationDate];
}

你可能感兴趣的:(iOS-缓存文件时间)