NSCache:实现缓存的类可以提高效率
2014-12-11 13:13
309 查看
iOS开发中很多时候需要用到缓存,特别是从网络下载图片或者展示大量的图片的时候需要尽量使用缓存,这样才能有更好的用户体验。
NSCache和NSDictionary(NSMutableDictionary)类似,都是用存储键值对,但是和他们的最大区别是当有内存警告是会自动释放内容,释放的顺序是先存的先释放。
还有一个区别是NSCache是retain而不是copy,存的键不需要支持NSCopying协议。
一个很好的例子就是在AFNetworking系统库中, 图片的下载有使用NSCache
//给每个请求设置图片缓存 }}@end
请求类中实现
NSCache和NSDictionary(NSMutableDictionary)类似,都是用存储键值对,但是和他们的最大区别是当有内存警告是会自动释放内容,释放的顺序是先存的先释放。
还有一个区别是NSCache是retain而不是copy,存的键不需要支持NSCopying协议。
一个很好的例子就是在AFNetworking系统库中, 图片的下载有使用NSCache
//NSCache类 @interface AFImageCache : NSCache - (UIImage *)cachedImageForRequest:(NSURLRequest *)request; - (void)cacheImage:(UIImage *)image forRequest:(NSURLRequest *)request; @end<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
<pre name="code" class="objc">@implementation AFImageCache - (UIImage *)cachedImageForRequest:(NSURLRequest *)request {//... return [self objectForKey:AFImageCacheKeyFromURLRequest(request)]; //缓存中请求对应的图片}- (void)cacheImage:(UIImage *)image forRequest:(NSURLRequest *)request{ if (image && request) { [self setObject:image forKey:AFImageCacheKeyFromURLRequest(request)];
//给每个请求设置图片缓存 }}@end
请求类中实现
- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest placeholderImage:(UIImage *)placeholderImage success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure { //获取缓存的图片 UIImage *cachedImage = [[[self class] af_sharedImageCache] cachedImageForRequest:urlRequest]; if (cachedImage) { <span style="white-space:pre"> </span>//显示图片 } else { //发起请求在请求完成后设置缓存 [[[self class] af_sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; } }注意: 尽量使用熟悉的
objectForKey:、
setObject:forKey:、
removeObjectForKey:方法,不要使用cost方法.因为即耗资源又可能造成不必要的麻烦.
相关文章推荐
- 【spring】通过GZIP压缩提高网络传输效率(可以实现任何资源的gzip压缩、包括AJAX)
- 【spring】通过GZIP压缩提高网络传输效率(可以实现任何资源的gzip压缩、包括AJAX)
- 通过GZIP压缩提高网络传输效率(可以实现任何资源的gzip压缩、包括AJAX)
- 乘方的实现 采用x*x可以提高效率
- 自定义导航栏,实现缓存,更新缓存,提高效率
- 怎样使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率
- 发挥缓存的威力,提高代码效率,及如何实现16位浮点数
- Spring-Boot 集成Redis实现查询缓存提高查询效率减轻数据库访问压力(涉及key的添加和删除)
- 如何使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率
- 自定义导航栏,实现缓存,更新缓存,提高效率
- 发挥缓存的威力,提高代码效率,及如何实现16位浮点数
- .Net集合类型大全,只要灵活运用可以节省很多开发时间和提高程序运行效率
- 提高工作效率可以缓解压力吗?
- gcc的编译选项(好多都可以提高效率的)
- 提高工作效率可以缓解压力吗?
- 提高工作效率可以缓解压力吗?
- C/C++用移位实现乘除法运算,提高运行效率
- ASP.Net使用缓存技术提高效率
- Collection -> .Net集合类型大全,只要灵活运用可以节省很多开发时间和提高程序运行效率
- Collection -> .Net集合类型大全,只要灵活运用可以节省很多开发时间和提高程序运行效率