SDWebImage 缓存机制分析

转载:http://blog.163.com/wzi_xiang/blog/static/659829612012111402812726/

清除缓存:

<wbr style="line-height:28px; color:rgb(76,76,76); font-family:'Hiragino Sans GB W3','Hiragino Sans GB',Arial,Helvetica,simsun,u5b8bu4f53; font-size:16px"><div style="line-height:28px; color:rgb(76,76,76); font-family:'Hiragino Sans GB W3','Hiragino Sans GB',Arial,Helvetica,simsun,u5b8bu4f53; font-size:16px"> <p style="line-height:18px; margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Arial,Verdana,sans-serif"> [[SDImageCache sharedImageCache] clearDisk];</p> <p style="line-height:18px; margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Arial,Verdana,sans-serif"> [[SDImageCache sharedImageCache] clearMemory];</p> <p style="line-height:18px; margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Arial,Verdana,sans-serif"> <br style="line-height:28px"></p> <p style="line-height:18px; margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Arial,Verdana,sans-serif"> 来自:http://blog.csdn.net/sqc3375177/article/details/7714573</p> <p style="line-height:18px; margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Arial,Verdana,sans-serif"> </p> <div id="article_content" style="line-height:26px; margin:20px 0px 0px; font-family:Arial; color:rgb(0,0,0)"> <p style="line-height:19px; margin:5px auto; padding-top:0px; padding-bottom:0px; font-size:13px; font-family:verdana,'ms song',宋体,Arial,微软雅黑,Helvetica,sans-serif; background-color:rgb(254,254,242)"> SDWebImage托管在github上。<a target="_blank" rel="nofollow" href="https://github.com/rs/SDWebImage" style="color:rgb(7,93,179); line-height:22.75px; margin:0px; padding:0px">https://github.com/rs/SDWebImage</a></p> <p style="line-height:19px; margin:5px auto; padding-top:0px; padding-bottom:0px; font-size:13px; font-family:verdana,'ms song',宋体,Arial,微软雅黑,Helvetica,sans-serif; background-color:rgb(254,254,242)"> 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征。<br style="line-height:22.75px; margin:0px; padding:0px"> 使用示范的代码:</p> <p style="line-height:1.5; margin:5px auto; padding-top:0px; padding-bottom:0px; font-family:verdana,'ms song',宋体,Arial,微软雅黑,Helvetica,sans-serif; background-color:rgb(254,254,242)"> <span style="line-height:28px; margin:0px; padding:0px">UITableView使用UIImageView+WebCache类(基本应用,UIImageView的一个category)</span></p> <p style="line-height:19px; margin:5px auto; padding-top:0px; padding-bottom:0px; font-size:13px; font-family:verdana,'ms song',宋体,Arial,微软雅黑,Helvetica,sans-serif; background-color:rgb(254,254,242)"> 前提#import导入UIImageView+WebCache.h文件,然后在tableview的cellForRowAtIndexPath:方法下:</p> <div style="line-height:28px; margin:5px 0px; padding:5px; background-color:rgb(245,245,245); font-family:'Courier New'; border:1px solid rgb(204,204,204); word-break:break-all; overflow:auto"> <div style="line-height:28px; margin:5px 0px 0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px 5px 0px 0px"><a target="_blank" title="复制代码" rel="nofollow" href="http://www.cnblogs.com/lovecode/articles/2246384.html" style="color:rgb(7,93,179); line-height:28px; margin:0px; padding:0px; border:none!important"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="line-height:28px; border:0px none; max-width:100%; height:auto; margin:0px; padding:0px"></a></span></div> <pre style="line-height:28px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-family:'Courier New'"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,128)"> 1</span> - (UITableViewCell *)tableView:(UITableView *)tableView <span style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,128)">cellForRowAtIndexPath</span></span>:(NSIndexPath *)indexPath {<br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,128)"> 2</span> <span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,0,255)">static</span> NSString *MyIdentifier = <span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,0)">@"</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,0)">MyIdentifier</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,0)">"</span>;<br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,128)"> 3</span> UITableViewCell *cell = [tableView <span style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,128)">dequeueReusableCellWithIdentifier</span></span>:MyIdentifier];<br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,128)"> 4</span> <span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,0,255)">if</span> (cell == nil) {<br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,128)"> 5</span> cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];<br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,128)"> 6</span> }<br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,128)"> 7</span> <span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)">//</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)"> Here we use the new provided setImageWithURL: method to load the web image</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)"><br style="line-height:28px; margin:0px; padding:0px"></span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,128)"> 8</span> [cell.imageView <span style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(255,0,255)">setImageWithURL</span></span>:[NSURL URLWithString:<span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,0)">@"</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,0)">http://www.domain.com/path/to/image.jpg</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,0)">"</span>] placeholderImage:[UIImage imageNamed:<span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,0)">@"</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,0)">placeholder.png</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,0)">"</span>]];<br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,128)"> 9</span> cell.textLabel.text = <span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,0)">@"</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,0)">My Text</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(128,0,0)">"</span>;<br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,128)">10</span> <span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,0,255)">return</span> cell;<br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,128)">11</span> }</pre> <div style="line-height:28px; margin:5px 0px 0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px 5px 0px 0px"><a target="_blank" title="复制代码" rel="nofollow" href="http://www.cnblogs.com/lovecode/articles/2246384.html" style="color:rgb(7,93,179); line-height:28px; margin:0px; padding:0px; border:none!important"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="line-height:28px; border:0px none; max-width:100%; height:auto; margin:0px; padding:0px"></a></span></div> </div> <pre style="line-height:19px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-size:13px; background-color:rgb(254,254,242)"><code style="line-height:22.75px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; font-size:16px"><span style="line-height:28px; margin:0px; padding:0px">基本代码:</span></span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(255,0,0); font-size:14px">[imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/image.jpg"]];</span><br style="line-height:22.75px; margin:0px; padding:0px"></code></pre> <p style="line-height:1.5; margin:5px auto; padding-top:0px; padding-bottom:0px; font-family:verdana,'ms song',宋体,Arial,微软雅黑,Helvetica,sans-serif; background-color:rgb(254,254,242)"> <span style="line-height:28px; margin:0px; padding:0px">使用SDWebImageManager类:可以进行一些异步加载的工作。</span></p> <div style="line-height:28px; margin:5px 0px; padding:5px; background-color:rgb(245,245,245); font-family:'Courier New'; border:1px solid rgb(204,204,204); word-break:break-all; overflow:auto"> <div style="line-height:28px; margin:5px 0px 0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px 5px 0px 0px"><a target="_blank" title="复制代码" rel="nofollow" href="http://www.cnblogs.com/lovecode/articles/2246384.html" style="color:rgb(7,93,179); line-height:28px; margin:0px; padding:0px; border:none!important"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="line-height:28px; border:0px none; max-width:100%; height:auto; margin:0px; padding:0px"></a></span></div> <pre style="line-height:28px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-family:'Courier New'">SDWebImageManager *manager = [SDWebImageManager sharedManager];<br style="line-height:28px; margin:0px; padding:0px">UIImage *cachedImage = [manager imageWithURL:url]; <span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)">// 将需要缓存的图片加载进来</span><br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,0,255)">if</span> (cachedImage) {<br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)">// 如果Cache命中,则直接利用缓存的图片进行有关操作</span><br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)">//</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)"> Use the cached image immediatly</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)"><br style="line-height:28px; margin:0px; padding:0px"></span>} <span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,0,255)">else</span> {<br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)">// 如果Cache没有命中,则去下载指定网络位置的图片,并且给出一个委托方法</span><br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)">//</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)"> Start an async download</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)"><br style="line-height:28px; margin:0px; padding:0px"></span> [manager downloadWithURL:url <span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,0,255)">delegate</span>:self];<br style="line-height:28px; margin:0px; padding:0px">}</pre> <div style="line-height:28px; margin:5px 0px 0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px 5px 0px 0px"><a target="_blank" title="复制代码" rel="nofollow" href="http://www.cnblogs.com/lovecode/articles/2246384.html" style="color:rgb(7,93,179); line-height:28px; margin:0px; padding:0px; border:none!important"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="line-height:28px; border:0px none; max-width:100%; height:auto; margin:0px; padding:0px"></a></span></div> </div> <pre style="line-height:19px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-size:13px; background-color:rgb(254,254,242)">当然你的类要实现SDWebImageManagerDelegate协议,并且要实现协议的<span style="line-height:22.75px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(255,0,255)">webImageManager:didFinishWithImage:</span></span>方法。<code style="line-height:22.75px; margin:0px; padding:0px"><br style="line-height:22.75px; margin:0px; padding:0px"></code></pre> <div style="line-height:28px; margin:5px 0px; padding:5px; background-color:rgb(245,245,245); font-family:'Courier New'; border:1px solid rgb(204,204,204); word-break:break-all; overflow:auto"> <pre style="line-height:28px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-family:'Courier New'"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)">// 当下载完成后,调用回调方法,使下载的图片显示</span><br style="line-height:28px; margin:0px; padding:0px">- (<span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,0,255)">void</span>)webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image {<br style="line-height:28px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)">//</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)"> Do something with the downloaded image</span><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,128,0)"><br style="line-height:28px; margin:0px; padding:0px"></span>}</pre> </div> <pre style="line-height:19px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-size:13px; background-color:rgb(254,254,242)"><span style="line-height:1.5; margin:0px; padding:0px; font-size:15px"><span style="line-height:26.25px; margin:0px; padding:0px">独立的异步图像下载</span></span><span style="line-height:22.75px; margin:0px; padding:0px"><br style="line-height:22.75px; margin:0px; padding:0px"></span>可能会单独用到异步图片下载,则一定要用<span style="line-height:22.75px; margin:0px; padding:0px"><span style="line-height:1.5; margin:0px; padding:0px; color:rgb(255,0,255)">downloaderWithURL:delegate:</span></span>来建立一个SDWebImageDownloader实例。</pre> <div style="line-height:28px; margin:5px 0px; padding:5px; background-color:rgb(245,245,245); font-family:'Courier New'; border:1px solid rgb(204,204,204); word-break:break-all; overflow:auto"> <pre style="line-height:28px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-family:'Courier New'">downloader = [SDWebImageDownloader downloaderWithURL:url <span style="line-height:1.5; margin:0px; padding:0px; color:rgb(0,0,255)">delegate</span>:self];<code style="line-height:28px; margin:0px; padding:0px"><br style="line-height:28px; margin:0px; padding:0px"></code></pre> </div> <pre style="line-height:19px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-size:13px; background-color:rgb(254,254,242)">这样SDWebImageDownloaderDelegate协议的方法imageDownloader:didFinishWithImage:被调用时下载会立即开始并完成。</pre> <pre style="line-height:19px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-size:13px; background-color:rgb(254,254,242)"><br style="line-height:22.75px; margin:0px; padding:0px"><span style="line-height:26.25px; margin:0px; padding:0px; font-size:15px">独立的异步图像缓存</span></pre> <pre style="line-height:19px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-size:13px; background-color:rgb(254,254,242)"><code style="line-height:22.75px; margin:0px; padding:0px">SDImageCache类提供一个创建空缓存的实例,并用方法imageForKey:来寻找当前缓存。<br style="line-height:22.75px; margin:0px; padding:0px"></code></pre> <div style="line-height:28px; margin:5px 0px; padding:5px; background-color:rgb(245,245,245); font-family:'Courier New'; border:1px solid rgb(204,204,204); word-break:break-all; overflow:auto"> <pre style="line-height:28px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-family:'Courier New'">UIImage *myCachedImage = [[SDImageCache sharedImageCache] imageFromKey:myCacheKey];</pre> </div> <pre style="line-height:19px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-size:13px; background-color:rgb(254,254,242)"><code style="line-height:22.75px; margin:0px; padding:0px"></code><br style="line-height:22.75px; margin:0px; padding:0px">存储一个图像到缓存是使用方法storeImage: forKey:</pre> <div style="line-height:28px; margin:5px 0px; padding:5px; background-color:rgb(245,245,245); font-family:'Courier New'; border:1px solid rgb(204,204,204); word-break:break-all; overflow:auto"> <pre style="line-height:28px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-family:'Courier New'">[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];</pre> </div> <pre style="line-height:19px; white-space:pre-wrap; word-wrap:break-word; margin-top:0px; margin-bottom:0px; padding:0px; font-size:13px; background-color:rgb(254,254,242)">默认情况下,图像将被存储在内存缓存和磁盘缓存中。如果仅仅是想内存缓存中,要使用storeImage:forKey:toDisk:方法的第三个参数带一负值<br style="line-height:22.75px; margin:0px; padding:0px">来替代。</pre> </div> </div> </wbr>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值