博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS缓存-内存缓存
阅读量:6089 次
发布时间:2019-06-20

本文共 2799 字,大约阅读时间需要 9 分钟。

为了减少与服务器的连接沟通次数,提高应用程序的执行速度,使用了iOS的缓存机制

 

#import "YoungViewController.h"

 

@interface YoungViewController ()<NSURLConnectionDelegate>

 

{

    NSURLConnection * connection;

}

 

@end

 

@implementation YoungViewController

 

- (void)viewDidLoad

{

    [super viewDidLoad];

    UIButton * btnCache = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    btnCache.frame = CGRectMake(50, 50, 100, 30);

    [btnCache setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];

    [btnCache setBackgroundColor:[UIColor orangeColor]];

    [btnCache setTitle:@"缓存" forState:UIControlStateNormal];

    [btnCache addTarget:self action:@selector(Chcal:)forControlEvents:UIControlEventTouchUpInside];

    [self.view insertSubview:btnCache atIndex:0];

}

-(void)Chcal:(id)sender

{

    NSString *paramURLAsString = @"http://www.baidu.com/";

    if([paramURLAsString length]==0)

    {

        NSLog(@"nil or empty is given!");

        return;

    }

    

    NSURLCache * urlCache = [NSURLCache sharedURLCache];

    /*设置缓存空间的大小--1M*/

    [urlCache setMemoryCapacity:1*1024*1024];

    

    /*创建一个nsurl*/

    NSURL *url = [NSURL URLWithString:paramURLAsString];

    

    /*创建一个请求*/

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlcachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0f];

    

    /*从请求中获取缓存输出*/

    NSCachedURLResponse *respose = [urlCache cachedResponseForRequest:request];

    

    //判断是否有缓存

    if(respose!=nil)

    {

        NSLog(@"如果有缓存输出,从缓存中获取数据");

        //[request setCachePolicy:NSURLRequestReloadIgnoringCacheData];//忽略缓存,重新下载

        

        //[request setCachePolicy:NSURLRequestReturnCacheDataElseLoad];//缓存中不存在才下载

        

        //[request setCachePolicy:NSURLRequestReturnCacheDataDontLoad];//使用缓存,绝对不请求网络

        

        //[request setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];//忽略缓存,重新下载

        

        //[request setCachePolicy:NSURLRequestReloadRevalidatingCacheData];//缓存于请求是否相同,同不下载,不同下载。

    }

    

    

    connection = nil;

    NSURLConnection *newConnection = [[NSURLConnection alloc]initWithRequest:request delegate:selfstartImmediately:YES];

    connection = newConnection;

}

 

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse

{

    NSLog(@"即将发送请求.....");

    return(request);

}

- (void)  connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

    NSLog(@"将接收输出.....");

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

    NSLog(@"数据长度为 = %lu", (unsigned long)[data length]);

}

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse

{

    //如果之前缓存中已经存在数据程序是不走这里的

    NSLog(@"将缓存输出.....");

    return(cachedResponse);

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{

    NSLog(@"请求完成.....");

}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

    NSLog(@"请求失败");

}

转载于:https://www.cnblogs.com/ios8/p/ios-ram.html

你可能感兴趣的文章
【Silverlight】Bing Maps学习系列(五):绘制多边形(Polygon)图形
查看>>
“单向网闸”技术介绍-网络隔离的新型产品
查看>>
Android2.0之后读取联系人——ContactsContract
查看>>
C/C++中的近指令、远指针和巨指针
查看>>
随机生成50个字段的elasticsearch的测试程序输入
查看>>
android下创建文件夹和修改其权限的方法
查看>>
第三篇:属性_第二节:控件属性在页面及源码中的表示方式
查看>>
数据结构与内存管理策略(上)
查看>>
python 23 种 设计模式
查看>>
java基础面试题
查看>>
如何使用DXUT框架
查看>>
六、传递、返回复杂类型的对象
查看>>
android:TabWidget/TabHost
查看>>
Qt中加入资源文件
查看>>
PDF.NET数据开发框架操作MySQL实体类操作实例
查看>>
ansible操作远程服务器报Error: ansible requires the stdlib json or simplejson module, neither was found!...
查看>>
ExtJS 2.0 正式发布了
查看>>
《算法设计手册》杂题3道
查看>>
oc-32-@property示例
查看>>
Tomcat6.0负载均衡策略
查看>>