iOS学习笔记-130.NSCache使用
来源:互联网 发布:时尚淘宝店 编辑:程序博客网 时间:2024/06/05 19:00
- NSCache使用
- 一简介
- 1 totalCostLimit 总成本说明
- 2 countLimit 总个数说明
- 二方法说明
- 三代码示例
- 四图示
- 五运行结果分析
NSCache使用
一、简介
NSCache的使用和我们的字典是一样的,唯一不同的就是,它有成本和个数可以做限制。除此之外,NSCache 是线程安全的。
1.1 totalCostLimit 总成本说明
NSCache 的 totalCostLimit 属性可以用来限制,缓存的大小,它和 - (void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g;
方法配合使用。
==但是重点是,如果我添加是同一个对象,那么只算一个对象的成本。==
比如,我们希望用我们的缓存来存储图片,我们限制图片缓存的总成本为 10M。
那么我们我们可以这么设置
_cache.totalCostLimit = 10;//假设我们的单位为 M
当我们添加图片到缓存中的时候,可以如下添加
[_cache setObject:image forKey:key cost:5];//假设我们的图片大小5M
那么我们添加第一、二个图片的时候,就会存入到图片缓存中。(假设图片大小都是5M)
现在我们来添加第三张图片,发现我们的缓存已经到了最大值,我们无法添加,
那么NSCache,就会把第一张图片从缓存中删除,然后来检查是空间是否已经足够
添加第三张图片了,如果不够,那么继续删除第二张,如果够了,那么把第三张
图片添加到缓存中。
1.2 countLimit 总个数说明
countLimit,是用来限制个数的。比如我们的缓存中限制了存入的个数是 5 个,现在我们来添加第6个,那么它会把第1个删除以后再添加。
==但是重点是,如果我添加是同一个对象,那么只算一个个数。==
二、方法说明
//通过key来获取对象- (nullable ObjectType)objectForKey:(KeyType)key;//存储对象对象,花费的成本默认为0- (void)setObject:(ObjectType)obj forKey:(KeyType)key; // 0 cost//存储对象对象,花费的成本需要传入- (void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g;//通过key来移除对象- (void)removeObjectForKey:(KeyType)key;//移除所有对象- (void)removeAllObjects;@protocol NSCacheDelegate <NSObject>@optional//即将回收对象的时候调用该方法- (void)cache:(NSCache *)cache willEvictObject:(id)obj;@end
三、代码示例
//// ViewController.m// 03_UIview88_NSCache//// Created by 杞文明 on 17/9/9.// Copyright © 2017年 杞文明. All rights reserved.//#import "ViewController.h"@interface ViewController ()<NSCacheDelegate>/*缓存*/@property(nonatomic,strong)NSCache *cache;/*删除数据的时候使用一下*/@property(nonatomic,assign)NSInteger index;@end@implementation ViewController-(NSCache *)cache{ if(_cache==nil){ //创建一个缓存 //NSCache的Key只是对对象进行Strong引用,不是拷贝(和可变字典的区别) _cache = [[NSCache alloc]init]; //总成本数是100 ,如果发现存的数据超过中成本那么会自动回收之前的对象 //如果我们做的是图片的缓存,那么我们这里可以设为图片缓存的最大值 //如果添加的对象是同一个对象,那么只算一个对象的成本。 _cache.totalCostLimit = 20; //设置我们的缓存中,能添加的个数据,如果添加的对象是同一个,那么只算一个个数// _cache.countLimit = 2; _cache.delegate = self; } return _cache;}/*存入不同的数据*/- (IBAction)addDifference:(id)sender { NSLog(@"---存入不同的数据----"); for (int i=0; i<5; i++) { NSObject * obj = [NSObject new];// [self.cache setObject:obj forKey:@(i)]; //添加到缓存中 [self.cache setObject:obj forKey:@(i) cost:10]; NSLog(@"存入数据 %zd--%@",i,obj); }}/*存入相同的数据*/- (IBAction)addSame:(id)sender { NSLog(@"---存入相同的数据----"); NSObject * obj = [NSObject new]; for (int i=0; i<5; i++) {// [self.cache setObject:obj forKey:@(i)]; [self.cache setObject:obj forKey:@(i) cost:10]; NSLog(@"存入数据 %zd--%@",i,obj); }}/*取数据*/- (IBAction)getData:(id)sender { NSLog(@"---取数据----"); for (int i=0; i<5; i++) { NSObject *obj = [self.cache objectForKey:@(i)]; if (obj!=nil) { NSLog(@"取到数据 %zd--%@",i,obj); } }}/*删除一个数据*/- (IBAction)removeOne:(id)sender { NSLog(@"---删除一个数据----"); [self.cache removeObjectForKey:@(self.index)]; self.index = (self.index+1)%5;}/*删除全部数据*/- (IBAction)removeAll:(id)sender { NSLog(@"---删除全部数据----"); [self.cache removeAllObjects];}/*即将回收对象的时候调用该方法*/-(void)cache:(NSCache *)cache willEvictObject:(id)obj{ NSLog(@"--回收--%@",obj);}@end
四、图示
五、运行结果分析
[37759:166850] ---存入相同的数据----[37759:166850] 存入数据 0--<NSObject: 0x600000206180>[37759:166850] 存入数据 1--<NSObject: 0x600000206180>[37759:166850] 存入数据 2--<NSObject: 0x600000206180>[37759:166850] 存入数据 3--<NSObject: 0x600000206180>[37759:166850] 存入数据 4--<NSObject: 0x600000206180>[37759:166850] ---删除全部数据----[37759:166850] --回收--<NSObject: 0x600000206180>[37759:166850] ---存入不同的数据----[37759:166850] 存入数据 0--<NSObject: 0x60000001bc50>[37759:166850] 存入数据 1--<NSObject: 0x60800001c280>[37759:166850] --回收--<NSObject: 0x60000001bc50>[37759:166850] 存入数据 2--<NSObject: 0x600000205b10>[37759:166850] --回收--<NSObject: 0x60800001c280>[37759:166850] 存入数据 3--<NSObject: 0x60800001c000>[37759:166850] --回收--<NSObject: 0x600000205b10>[37759:166850] 存入数据 4--<NSObject: 0x60000001bc50>
存入同一个对象的时候,它只算了一个成本,所有我们而已存入5个数据。
存入不同的对象的时候,我们发现,一开始存入 数据0和数据1 的时候没什么问题
存入 数据2 的时候,它回收了数据0。存数 数据3 回收了数据1 。
阅读全文
0 0
- iOS学习笔记-130.NSCache使用
- iOS NSCache使用
- IOS学习 NSCache 缓存类
- iOS学习笔记-131.多线程24——多图下载4_第四种实现方式(缓存使用NSCache)
- iOS---NSCache的简单使用
- NSCache在IOS中的使用
- ios之NSCache的使用
- iOS学习之——NSCache
- IOS学习笔记 - NSFileManager,沙盒路径,NSString类路径处理,NSCache,读取文件头判断图片类型
- iOS 如何在程序中使用NSCache实现缓存
- IOS之NSCache解析
- iOS之NSCache介绍
- iOS 【Mutithreading-NSCache】
- iOS NSCache 用法
- ios-NSCache简单介绍
- iOS NSCache内存优化
- NSCache使用介绍
- NSCache使用常见错误
- 解决Mysql远程访问限制连接1130
- hibernate 非数据库对应字段
- 北大保卫部把《邓选》电子版唯一合法制作者踹出北大校门
- Matlab读取Access数据库的数据01
- 数据结构课程设计-图书管理系统
- iOS学习笔记-130.NSCache使用
- parallels desktop cracked
- new operator、operator new 、placement new三者之间的区别与联系
- iOS学习笔记-131.多线程24——多图下载4_第四种实现方式(缓存使用NSCache)
- Web Service 最简实现和测试
- memset(this, 0, sizeof *this)
- C 语言中的文件操作函数
- 每日英语阅读(五十一)
- numpy 中数据选取和切片选取的区别