如何获取图像缓存,并将 sdwebimage 缓存的文件系统路径

SDWebImage&异步加载网络图片&缓存内存及本地
摘自:/lovecode/articles/2246384.html
SDWebImage托管在github上。
这个类库提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征。
使用示范的代码:
UITableView使用UIImageView+WebCache类(基本应用,UIImageView的一个category)
前提#import导入UIImageView+WebCache.h文件,然后在tableview的cellForRowAtIndexPath:方法下:
1 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
7 // Here we use the new provided setImageWithURL: method to load the web image 8
[cell.imageView setImageWithURL:[NSURL URLWithString:@"/path/to/image.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
cell.textLabel.text = @"My Text";
基本代码:[imageView setImageWithURL:[NSURL URLWithString:@"/path/image.jpg"]];
使用SDWebImageManager类:可以进行一些异步加载的工作。
SDWebImageManager *manager = [SDWebImageManager sharedManager];
UIImage *cachedImage = [manager imageWithURL:url]; // 将需要缓存的图片加载进来
if (cachedImage) {
// 如果Cache命中,则直接利用缓存的图片进行有关操作
// Use the cached image immediatly} else {
// 如果Cache没有命中,则去下载指定网络位置的图片,并且给出一个委托方法
// Start an async download
[manager downloadWithURL:url delegate:self];
当然你的类要实现SDWebImageManagerDelegate协议,并且要实现协议的webImageManager:didFinishWithImage:方法。
// 当下载完成后,调用回调方法,使下载的图片显示
- (void)webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image {
// Do something with the downloaded image}
独立的异步图像下载可能会单独用到异步图片下载,则一定要用downloaderWithURL:delegate:来建立一个SDWebImageDownloader实例。
downloader = [SDWebImageDownloader downloaderWithURL:url delegate:self];
这样SDWebImageDownloaderDelegate协议的方法imageDownloader:didFinishWithImage:被调用时下载会立即开始并完成。
独立的异步图像缓存
SDImageCache类提供一个创建空缓存的实例,并用方法imageForKey:来寻找当前缓存。
UIImage *myCachedImage = [[SDImageCache sharedImageCache] imageFromKey:myCacheKey];
存储一个图像到缓存是使用方法storeImage: forKey:
[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];
默认情况下,图像将被存储在内存缓存和磁盘缓存中。如果仅仅是想内存缓存中,要使用storeImage:forKey:toDisk:方法的第三个参数带一负值
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。主题 : sdwebimage缓存图片对比问题
亲爱的会员,CocoaChina服务团队真诚希望得到您的反馈:
功能建议报告错误其他如何获取图像缓存,并将 SDWebImage (iOS) 的文件系统路径
我使用的图像在中我的 iOS 应用程序的缓存。
一切都很好,但是当用户滚动快速的集合视图有总是小暂停之前占位符将被替换缓存的图像。我相信这是因为缓存中检查。为更好的用户体验,我想要显示正确的图像,而不是占位符,一旦图像实际上的高速缓存的单元格。如果我能得到的缓存的图像 (设备) 本地文件系统路径并将它存储在该显示的实例,并使用它,这将很容易 (如果存在) 而不是我的占位符。
然而它获取的唯一论据是实例 (实际上也有BOOL变量称为缓存太正在传递的主分支) 中有向的可能性。所以-有没有可能直接从UIImage实例获取图像的文件系统路径?或我应该修改SDWebImage所以它传递的信息,以及缓存实例吗?或者是那里任何更好地方式实现上文所述的目标吗?
我显示的类具有imageURL和在这里是如何显示的单元格使用 SDWebImage:
#import "ShowCell.h"
#import &SDWebImage/UIImageView+WebCache.h&
@implementation ShowCell
@synthesize imageView = _imageV
@synthesize label = _
@synthesize show = _
- (void)setShow:(Show *)show
if (_show != show) {
self.label.text = show.
if (show.imageURL) {
[self.imageView setImageWithURL:[NSURL URLWithString:show.imageURL]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
解决方法 1:
我有一个类似的问题,请参阅: SDWebImage 显示缓存中的图像占位符
基本上我叉形的项目要解决此问题。
只是你可以避免闪烁 (这同样适用于主分支上的项目):
[imageView setImageWithURL:url placeholderImage:imageView.image options:0
progress:^(NSUInteger receivedSize, long long expectedSize) {
imageView.image = [UIImage imageNamed:@"QuestionMarkFace.png"];
} completed:nil];& SDWebImage–从网络获取image
SDWebImage–从网络获取image
开源类SDWebImage是对UIImageView与UIButton使用类别扩展的类.实现的功能是使UIImageView或UIButton可以更加给定的url动态加载网络图片.作者Olivier Poitrey.
SDWebImageCompat:引入头文件
SDWebImageDownloader:
1.根据给定的url下载图片并保存为UIImage(不负责保存到本地)
2.下载参数可以包括userInfo,用来区分不同的下载图片
3.可以设置下载的优先级,分为高低两种.
4.扩展功能,对下载的图片解码,对ENABLE_SDWEBIMAGE_DECODER定义即可实现
5.下载开始与取消
- (void)imageDownloaderDidFinish:(SDWebImageDownloader *)
- (void)imageDownloader:(SDWebImageDownloader *)downloader didFinishWithImage:(UIImage *)
- (void)imageDownloader:(SDWebImageDownloader *)downloader didFailWithError:( *)//失败的原因也包含编码失败,若有编码功能.
使用SDNetworkActivityIndicator,现实消息传递.
SDImageCache:
1.存储图片到内存中,以key的值存到Dic中,方便调用.
2.存储图片到硬盘,从硬盘读取图片,读取后写入以key值Dic中.
3.如果图片有userInfo,userInfo与图片同时存储.
4.扩展功能,对图片解码存储,对ENABLE_SDWEBIMAGE_DECODER定义即可实现
5.查找key,需要代理 ???
6.清除内存,清除缓存.
找到与未找到图片
- (void)imageCache:(SDImageCache *)imageCache didFindImage:(UIImage *)image forKey:( *)key userInfo:( *)
- (void)imageCache:(SDImageCache *)imageCache didNotFindImageForKey:( *)key userInfo:( *)
使用queryDiskCacheForKey
SDWebImageManager:
1.下载管理,本地缓存管理.
2.图片管理分为,重试失败\低优先级\不存储到本地
3.执行了下载和图片本地缓存类的代理
//图片查找成功和失败
- (void)webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)
- (void)webImageManager:(SDWebImageManager *)imageManager didFailWithError:( *)
SDWebImageDecoder:
本文的评论功能被关闭了.如何获得文件系统路径的图像缓存与SDWebImage(IOS)
我SDWebImage图像缓存在UICollectionView在我的iOS应用。
一切都很好,但快速滚动在集合视图有前占位符替换缓存的图像总是很少。我相信这是由于缓存检查。对于经验,我想细胞,以显示占位符,而不是正确的图像,一旦图像实际上是缓存。这将是(如果存在的话)的它,而不是我的占位符容易,如果我能得到缓存图像的局部(设备)文件系统的路径,并将其存储在显示实例。
有可能通过块到setImageWithURL方法,但是它得到的不仅是UIImage的实例(实际上是在主分支也有称为缓存的传递太布尔变量)。所以-有没有可能获得图像的文件系统路径直接从UIImage的实例?或者我应该修改SDWebImage所以它通过与缓存实例?或者有没有更好的办法达到目的我前面描述的?
我型我秀类有图片地址,这里是展示如何SDWebImage:
#import "ShowCell.h"
#import &SDWebImage/UIImageView+WebCache.h&
@implementation ShowCell
@synthesize imageView = _imageV
@synthesize label = _
@synthesize show = _
- (void)setShow:(Show *)show
if (_show != show) {
self.label.text = show.
if (show.imageURL) {
[self.imageView setImageWithURL:[NSURL URLWithString:show.imageURL]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
本文地址 :CodeGo.net/511706/
-------------------------------------------------------------------------------------------------------------------------
1. 我也有类似的问题,请参阅:SDWebImage显示在高速缓存中占位符的图像
基本上我分叉的工程解决这个问题。
你可以做到这一点,以避免闪烁(这适用于该项目的主分支):
[imageView setImageWithURL:url placeholderImage:imageView.image options:0
progress:^(NSUInteger receivedSize, long long expectedSize) {
imageView.image = [UIImage imageNamed:@"QuestionMarkFace.png"];
} completed:nil];
本文标题 :如何获得文件系统路径的图像缓存与SDWebImage(IOS)
本文地址 :CodeGo.net/511706/
继续浏览 :
您可以会感兴趣的文章:1.
Copyright (C) 2014 CodeGo.net 沪ICP备号 联系电邮: (#=@)

我要回帖

更多关于 文件系统缓存 的文章

 

随机推荐