缓存--cache

一:MD5+Hash

       

MD5+hash,是哈希散列算法,是不可逆的,(不能逆运算,即解码)每个字符串经过MD5Hash算法之后,都会得到一个独一无二的值。

        说明:使用第三方库 Hash

二:缓存

      

先从tmp文件夹中寻找有没有缓存文件,如果有,直接读取,没有再去网络请求。网络请求之后,将其经过MD5Hash之后,写到tmp文件中去。


#import "AZViewController.h"
#import "NSString+Hashing.h"

@interface AZViewController ()<NSURLConnectionDataDelegate>
{
    NSMutableData *_mdata;
}
@end

@implementation AZViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    /**
                MD5+hash,是哈希散列算法,是不可逆的,(不能逆运算,即解码)每个字符串经过MD5Hash算法之后,都会得到一个独一无二的值。
     
     
                缓存:  先从tmp文件夹中寻找有没有缓存文件,如果有,直接读取,没有再去网络请求。网络请求之后,将其经过MD5Hash之后,写到tmp文件中去。
         */
    
    NSString* url=@"http://images.takungpao.com/2013/0617/20130617012933641.jpg";
    //路径为真则有缓存,为假则无缓存
    NSString* path=[NSString stringWithFormat:@"%@/tmp/%@",NSHomeDirectory(),[url MD5Hash]];
    NSFileManager* fm=[NSFileManager defaultManager];
    if ([fm fileExistsAtPath:path]) {
        //有缓存,直接读取
        NSLog(@"缓存读取");
        NSData* data=[NSData dataWithContentsOfFile:path];
       
    }else{
        //无缓存
        NSURLRequest*request=[NSURLRequest requestWithURL:[NSURL URLWithString:url]];
        [NSURLConnection connectionWithRequest:request delegate:self];
    }
    

    
}

//多次调用
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [_mdata appendData:data];
    
    // NSLog(@"%@",NSString stringWithFormat:@"%@/tmp/%@",NSHomeDirectory(),[url MD5Hash);
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    //完成加载后,将其MD5Hash,保存到tmp文件夹中
    //写本地
    NSString* url=@"http://images.takungpao.com/2013/0617/20130617012933641.jpg";
    [_mdata writeToFile:[NSString stringWithFormat:@"%@/tmp/%@",NSHomeDirectory(),[url MD5Hash]] atomically:NO];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"失败");
}

@end


你可能感兴趣的:(缓存--cache)