iOS缓存-内存缓存
为了减少与服务器的连接沟通次数,提高应用程序的执行速度,使用了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(@"请求失败");
}
iOS缓存-内存缓存的更多相关文章
- Caffeine缓存 最快缓存 内存缓存
一.序言 Caffeine是一个进程内部缓存框架. 对比Guava Cache Caffeine是在Guava Cache的基础上做一层封装,性能有明显提高,二者同属于内存级本地缓存.使用Caffei ...
- IOS 区分缓存 内存 物理存储 逻辑存储
1. 存储器分为内部存储器(内存)和外部存储器(外存). ①内存 内存是电脑内部临时存放数据的地方,供CPU直接读取,存放在其中的数据要靠电来维持,一旦断电就会丢失.因此,在操作电脑时,应及时地将需要 ...
- 玩转iOS开发 - 数据缓存
Why Cache 有时候.对同一个URL请求多次,返回的数据可能都是一样的,比方server上的某张图片.不管下载多少次,返回的数据都是一样的. 上面的情况会造成下面问题 (1)用户流量的浪费 (2 ...
- 内存缓存的使用Demo
使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求. 内存缓存我们可以使用sdk中的NSURLC ...
- IOS - 开发之内存缓存机制
使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求. 内存缓存我们可以使用sdk中的NSURLC ...
- iOS开发之内存缓存机制
使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求. 内存缓存我们可以使用sdk中的NSURLC ...
- iOS - ImageCache 网络图片缓存
1.ImageCache 使用内存缓存方式: 使用沙盒缓存方式: 使用网络图片第三方库方式: SDWebImage: iOS 中著名的网络图片处理框架 包含的功能:图片下载.图片缓存.下载进度监听.g ...
- iOS-NSURLCache内存缓存
在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在IOS设备中加一个缓存的机制.使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需 ...
- iOS html5使用缓存并及时更新方案总结
最近一段时间研究了一下H5在iOS移动端表现时使用缓存并可及时更新方案,总结如下: 一.使用Webview自带缓存机制 当我们使用webview加载html资源时的,本质上就是一个向服务器索取资源的h ...
随机推荐
- CDB和PDB的创建、连接、启动、关闭
一.CDB和PDB基本管理 基本概念: Multitenant Environment:多租户环境 CDB(Container Database):数据库容器 PD(Pluggable Databas ...
- Java之创建对象>7.Avoid finalizers
1.Finalizers are unpredictable, often dangerous, and generally unnecessary. 2.never do anything time ...
- Web网站错误提示页面和默认訪问页面设置
1.asp.net 定制简单的错误处理页面 通常web应用程序在公布后.为了给用户一个友好界面和使用体验,都会在发生错误时跳转至一个自己定义的错误页面,而不是asp.net向用户暴露出来的具体的异常列 ...
- Java用freemarker导出word
概述 最近一个项目要导出word文档,折腾老半天,发现还是用freemarker的模板来搞比较方便省事,现总结一下关键步骤,供大家参考,这里是一个简单的试卷生成例子. 详细 代码下载:http://w ...
- 共享内存:mmap函数实现
内存映射的应用: 以页面为单位,将一个普通文件映射到内存中,通常在须要对文件进行频繁读写时使用,这样用内存读写代替I/O读写,以获得较高的性能; 将特殊文件进行匿名内存映射,能够为关联进程提供共享内存 ...
- 解决CSS的position:absolute中left效果
有时候css中设置了position:absolute,left:100px,但是如果我们不想要这个left怎么办呢,当然你直接删除就可以,但是如果是框架的css,你直接删除就有问题了,这时候该怎么办 ...
- java面试题--实现一个百亿的计算器
看了网上很多说法,没有具体把它实现的,我试了一下其实还是比较简单的. 直接看代码: package com.infomorrow; import java.math.BigInteger; impor ...
- placement new 笔记
之前看到 偶尔用placement new 的用法,当分配内存频繁,而且对效率要求很高的情况下,可以先申请一块大内存,然后在此内存上构建对象,关键是可以自动调用其构造函数,否则要悲剧. 但是之后要自己 ...
- 【DeepLearning】Exercise:Vectorization
Exercise:Vectorization 习题的链接:Exercise:Vectorization 注意点: MNIST图片的像素点已经经过归一化. 如果再使用Exercise:Sparse Au ...
- React(0.13) 定义一个input组件,使其输入的值转为大写
<!DOCTYPE html> <html> <head> <title>React JS</title> <script src=& ...