NSCache的简单使用

原创 2015年11月20日 10:02:48

NSCache 是苹果官方提供的缓存类,用法与 NSMutableDictionary 的用法很相似,在 AFNetworking 和 SDWebImage 中,使用它来管理缓存

NSCache 在系统内存很低时,会自动释放一些对象

NSCache 是线程安全的,在多线程操作中,不需要对 Cache 加锁

NSCache 的 Key 只是做强引用,不需要实现 NSCopying 协议

属性

name delegate totalCostLimit                    缓存空间的最大总成本,超出上限会自动回收对象 默认值是 0,表示没有限制

countLimit                                                  能够缓存对象的最大数量 默认值是 0,表示没有限制

evictsObjectsWithDiscardedContent          表示缓存是否回收废弃的内容 默认值是 YES,表示自动回收

方法

-objectForKey: 返回与键值关联的对象

-setObject:forKey:在缓存中设置指定键名对应的值与可变字典不同,缓存对象不会对键名做 copy 操作 0 成本

-setObject:forKey:cost:在缓存中设置指定键名对应的值,并且指定该键值对的成本

成本 (cost) 用于计算记录在缓冲中的所有对象的总成本

啥叫成本?

例子:缓存图片 缓存 100 张图片 将图片的”宽 * 高”当作成本,图像”像素” 10M 当作缓存成本,无论缓存的多少张照片,只要像素值超过 10M,就自动清理 缓存图像的时候,使用成本,比单纯设置数量要科学!

-(void)setObject:(id)obj forKey:(id)key cost:(NSUInteger)g;   当出现内存警告时,或者超出缓存的总成本上限时,缓存会开启一个回收过程,删除部分元素

-removeObjectForKey:  删除缓存中,指定键名的对象

-removeAllObjects  删除缓存中所有对象(很可怕,最好别用)

委托方法

cache:willEvictObject      缓存将要删除对象时调用 不能在此方法中修改缓存

代码演练

需要实现NSCacheDelegate

@interfaceViewController () <NSCachedelegate>

实现代理方法:

// 当缓存中的对象被清除的时候,会自动调用

// obj 就是要被清理的对象

// 提示:不建议平时开发时重写!仅供调试使用

- (void)cache:(NSCache *)cache willEvictObject:(id)obj {

    [NSThread sleepForTimeInterval:0.5];

    NSLog(@"清除了-------> %@", obj);

}

声明NSCache变量:

@property(nonatomic, strong) NSCache *cache;

懒加载:

- (NSCache *)cache {

    if (_cache == nil) {

        _cache = [[NSCache alloc] init];

        // 设置数量限制,最大限制为10

        _cache.countLimit = 10;

        _cache.delegate = self;

    }

    return _cache;

}

测试Demo:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    for (int i = 0; i < 20; ++i) {

        NSString *str = [NSString stringWithFormat:@"hello - %04d", i];

        NSLog(@"设置 %@", str);

        // 添加到缓存

        [self.cache setObject:str forKey:@(i)];

    }

    // - 查看缓存内容,NSCache 没有提供遍历的方法,只支持用 key 来取值

    for (int i = 0; i < 20; ++i) {

        NSLog(@"缓存中----->%@", [self.cache objectForKey:@(i)]);

    }

}

运行结果:




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS---NSCache的简单使用

NSCacheNSCache 是苹果官方提供的缓存类,用法与 NSMutableDictionary 的用法很相似,在 AFNetworking 和 SDWebImage 中,使用它来管理缓存 NSC...

NSCache的简单介绍应用

NSCache介绍 NSCache 是苹果提供的一个专门用来做缓存的类 使用和 NSMutableDictionary 非常相似 是线程安全的 当内存不足的时候,会自动清理缓存 程序开始时,...

NSCache介绍及使用

构建缓存时选用NSCache而非NSDictionary在写 程序时,经常遇到从网络上下载图片的问题,比如客户要求应用上的图片他们可以在后台修改等,那从网上下载的图片如何来缓存呢?一开始我们的做法是将...

利用NSCache提升效率

利用NSCache提升效率

iOS开发之缓存框架、内存缓存、磁盘缓存、NSCache、TMMemoryCache、PINMemoryCache、YYMemoryCache、TMDiskCache、PINDiskCache

1.在项目中我们难免会用到一些缓存方式来保存服务器传过来的数据,以减少服务器的压力。 缓存的方式分为两种分别为内存缓存和磁盘缓存,内存缓存速度快容量小,磁盘缓存容量大速度慢可持久化。常见的内存缓存有N...

NSCache

可怜的 NSCache 一直处于 NSMutableDictionary 的阴影之下。就好像没有人知道它提供了垃圾处理的功能,而开发者们却费劲力气地去自己实现它。 没错,NSCache 基本上就是一...

NSCache

NSCache是系统提供的一种类似于集合(NSMutableDictionary)的缓存,它与集合的不同如下: 1. NSCache具有自动删除的功能,以减少系统占用的内存; 2. NSC...

IOS学习笔记 - NSFileManager,沙盒路径,NSString类路径处理,NSCache,读取文件头判断图片类型

1,沙盒路径的一些操作 IOS沙盒路径: iOS的沙盒机制,应用只能访问自己应用目录下的文件。iOS不像android,没有SD卡概念,不能直接访问图像、视频等内容。iOS应用产生的内容,如图像、文件...

NSCache和NSURLCache网络缓存优化

首先要说一件重要的事: NSCache和NSURLCache一点关系也没有 NSCache和NSURLCache一点关系也没有 NSCache和NSURLCache一点关系也没有 ...

NSCache

NSCache是一个类似于集合的容器,即缓存。它存储key-value对,这一点类似于NSDictionary类。我们通常用使用缓存来临时存储短时间使用但创建昂贵的对象。重用这些对象可以优化性能,因为...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)