• NSCache


    在ios中,苹果提供了,NSCache类和NSDictionary很相似,提供key,value的存储,不一样的是NSCache在内存吃紧的时候会做自动释放。

    遇到一个问题是,在使用大量图片的app中,需要从存储里面读取数据,每次都从文件系统里面读取文件会造成卡顿现象。

    解决办法就是把NSData对象缓存起来,先从NSCache里面读取数据,然后再从文件系统获取数据,提高效率。

    方法如下:

    步骤1:需要一个单例的NSCache,由于我们的FileUtil本来就是单例的,所以只是需要在初始化FileUtil的时候实例出一个NSCache就行了。

    _cache = [[NSCache alloc] init];
    

    步骤2:写文件的时候,把NSData存入NSCache里面

    -(void)write:(NSData*)data forKey:(NSString*)key
    
    {
    
    NSString *filepath  = [self filePathForKey:key];
    
    [_cache setObject:data forKey:key];
    
    dispatch_async(fileQueue, ^{
    
    [[NSFileManager defaultManager] createFileAtPath:filepath contents:data attributes:nil];
    
    });
    
    }
    

    步骤3:读文件时候,先从NSCache里面读取,如果没有再从文件系统中读取。从文件系统中读取到的数据,再放回到NSCache中。

    -(NSData*)readForKey:(NSString*)key
    
    {
    
    if(key==nil){
    
    return nil;
    
    }
    
    NSData *cacheData = [_cache objectForKey:key];
    
    if(cacheData){
    
    NSLog(@"get data from cache");
    
    return cacheData;
    
    }else{
    
    NSLog(@"miss data from cache");
    
    NSString *filepath =[self filePathForKey:key];
    
    NSData *fileData =  [[NSFileManager defaultManager] contentsAtPath:filepath];
    
    if(fileData){
    
    [_cache setObject:fileData forKey:key];
    
    }
    
    return fileData;
    
    }
    
    }
    

    总结:通过这样的方式,形成了 内存 -> 文件系统  -> 网络图片 的三级图片访问系统。

  • 相关阅读:
    NGINX不允许向静态文件提交POST方式的请求,否则报405错误(apache中没有出现)
    nginx反向代理做cache配置
    Apache与Nginx的优缺点比较
    Nginx配置文件详细说明
    Nginx 配置指令的执行顺序
    不可忽略的apache 的 Keep Alive
    HTTP Keep-Alive详解
    跳转 nginx 跳转 apache跳转
    apache重定向无效
    WebUploader 超大文件上传解决方案:分片断点上传(一)
  • 原文地址:https://www.cnblogs.com/riskyer/p/3339533.html
Copyright © 2020-2023  润新知