IOS 开发缓存机制----内存缓存机制

本文介绍了如何使用NSURLCache实现iOS应用中的内存缓存机制。通过设置缓存策略,可以有效地减少对同一URL的重复请求,提高应用响应速度。文中详细解释了不同的缓存策略,并提供了一个简单的内存缓存示例。

使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求。


内存缓存我们可以使用sdk中的NSURLCache类。NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型。

 

1NSURLRequestUseProtocolCachePolicy NSURLRequest默认的cache policy,使用Protocol协议定义。

2NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载。

3NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载。

4NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式;

5NSURLRequestReloadIgnoringLocalAndRemoteCacheData:忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。

6NSURLRequestReloadRevalidatingCacheData:验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据。

 

NSURLCache还提供了很多方法,来方便我们实现应用程序的缓存机制。

//
//  RootViewController.h
//  cacheDemo
//  (内存缓存demo-声明)
//  Created by iMilo TEANA on 12-2-1.
//  Copyright (c) 2012年 TEANA. All rights reserved.
//
 
#import <UIKit/UIKit.h>
 
@interface RootViewController : UIViewController
<NSURLConnectionDelegate>
 
- (IBAction)cachePress:(UIButton *)button;
 
@end
 
//
//  RootViewController.m
//  cacheDemo
//  (内存缓存demo-定义)
//  Created by iMilo TEANA on 12-2-1.
//  Copyright (c) 2012年 TEANA. All rights reserved.
//
 
#import "RootViewController.h"
 
@interface RootViewController()
 
@property(nonatomic, retain) NSURLConnection *connection;
 
@end
 
@implementation RootViewController
 
@synthesize connection = _connection;
 
#pragma mark -
#pragma mark - super code
 
- (void)dealloc
{
    [_connection release];
    [super dealloc];
}
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    [[self view] setBackgroundColor:[UIColor redColor]];
}
 
- (void)viewDidUnload
{
    [super viewDidUnload];
}
 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
 
#pragma mark -
#pragma mark - user code
 
- (IBAction)cachePress:(UIButton *)button
{
    //URL
    NSString *URLStr = @"http://www.baidu.com";
    if ([URLStr length] == 0)
    {
        NSLog(@"Nil or empty URL is given");
        return;
    }
    //设置缓存
    NSURLCache *urlCache = [NSURLCache sharedURLCache];
    //设置缓存大小未1M
    [urlCache setMemoryCapacity:1*1024*1024];
    //创建URL
    NSURL *URL = [NSURL URLWithString:URLStr];
    //创建请求
    NSMutableURLRequest *request =
    [NSMutableURLRequest requestWithURL:URL
                            cachePolicy:NSURLRequestUseProtocolCachePolicy //缓存策略(默认)
                        timeoutInterval:60.0f];//
    //从请求中获取缓存输出
    NSCachedURLResponse *response = [urlCache cachedResponseForRequest:request];
    //判断是否有缓存
    if (response != nil)
    {
        NSLog(@"如果有缓存,从缓存中获取数据");
        [request setCachePolicy:NSURLRequestReturnCacheDataDontLoad];
    }
    //将链接置为空
    _connection = nil;
    //重新创建链接
    NSURLConnection *connection =
    [[NSURLConnection alloc] initWithRequest:request
                                    delegate:self
                            startImmediately:YES];
    [self setConnection:connection];
    [connection release];
    connection = nil;
}
 
#pragma mark -
#pragma mark - delegate code
 
- (void)connection:(NSURLConnection *)connection
 idReceiveResponse:(NSURLResponse *)response
{
    NSLog(@"将要接收数据");
}
 
- (NSURLRequest *)connection:(NSURLConnection *)connection
             willSendRequest:(NSURLRequest *)request
            redirectResponse:(NSURLResponse *)redirectResponse
{
    NSLog(@"即将发送请求");
    return request;
}
 
- (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(@"请求失败");
}
 
@end


源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值