iOS图片的下载缓存全部在此
分类: iOS编程 -- : 2075人阅读 评论() 收藏 举报
注意: 我的文章只写给自己看
----------------------------------------------------------------------------------------
(一)这部分(感觉out了), 但是还是保留, 算是学习的痕迹.
----------------------------------------------------------------------------------------
()最简单的下载,显示图片的方法:
[plain] view plaincopy
UIImageView *imageView = [[UIImageView alloc] initWithFrame:[self.view bounds]];
imageView.image = [self loadImageFromUrl:@"http://storage.live.com/items/72A00BF5A838647C!1616?filename=meinv004.jpg"];
[self.view addSubview:imageView]; -(UIImage*)loadImageFromUrl: (NSString*)url
{
NSURL *imageUrl = [NSURL URLWithString:url];
NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
UIImage *image = [UIImage imageWithData:imageData];
return image;
} 这种最简单的图片加载方式阻塞了main线程. 使得流程不能流畅进行. ()开辟线程来解决这个问题. [plain] view plaincopy
// set imageview
UIImageView *imageView = [[UIImageView alloc] initWithFrame:[self.view bounds]];
imageView.backgroundColor = [UIColor yellowColor];
imageView.tag = imageView_tag;
[self.view addSubview:imageView]; // load image in background
NSString *url = IMAGE_URL;
[self performSelectorInBackground:@selector(loadImageFromUrl:) withObject:url]; -(void)loadImageFromUrl: (NSString*)url {
NSURL *imageUrl = [NSURL URLWithString:url];
NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
[self performSelectorOnMainThread:@selector(updateImageView:) withObject:imageData waitUntilDone:NO];
}
-(void) updateImageView:(NSData*) data {
UIImageView *imageView = (UIImageView *)[self.view viewWithTag:imageView_tag];
imageView.image = [UIImage imageWithData:data];
} 并且只能在main线程中设置UI的内容, 所以代码量增加了较多. 代码量暂且不管, 这里还有一个比较严重的问题就是每次都要加载图片, 使用SDWebImage:
[plain] view plaincopy
#import <SDWebImage/UIImageView+WebCache.h>
[imageView setImageWithURL:[NSURL URLWithString:[_objects objectAtIndex:indexPath.row]]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
SDWebImage可以实现:
*下载和缓存图片.
*相同的url不会被重复下载.
*坏的url不会一直请求. 使用HJCache:
[plain] view plaincopy
// 目前HJCache不支持ARC, 所以这是个问题. -----------------------------------------------------------------------------------------------------------------
(二)多线程初步实现TableView的图片显示(之前用第三库老是不稳定) 这个算是比较满意的.
------------------------------------------------------------------------------------------------------------------------
[plain] view plaincopy
@interface c:NSOperation @property NSString *url;
@property NSString *imageName;
@property UIImage *image;
@property UIImageView *delegate; -(void) main;
-(id) initWith:(NSString *)url imageName:(NSString *)imageName delegate:(UIImageView *)delegate; @end @implementation c:NSOperation
@synthesize url = _url,imageName=_imageName, image=_image, delegate=_delegate; -(id) initWith:(NSString *)url imageName:(NSString *)imageName delegate:(UIImageView *)delegate{
if (self = [super init]) {
self.url = url;
self.imageName = imageName;
self.delegate = delegate;
}
return self;
} -(void) main{
//
NSString *cachefile = [NSTemporaryDirectory() stringByAppendingPathComponent: self.imageName];
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]];
[data writeToFile:cachefile atomically:YES]; //
self.image = [UIImage imageWithData:data];
[self performSelectorOnMainThread:@selector(u) withObject:nil waitUntilDone:NO];
}
-(void)u{
[self.delegate setImage:self.image];
} [plain] view plaincopy
queue = [[NSOperationQueue alloc] init];//这是成员队列的实例化
设置TableView cell中的图片:
[plain] view plaincopy
NSString *filename = [NSString stringWithFormat:@"%d", indexPath.row];
NSString *cachefile = [NSTemporaryDirectory() stringByAppendingPathComponent: filename];
UIImage *image = [UIImage imageWithContentsOfFile:cachefile];
if (image) {
cell.imageView.image = image;
} else {
c *o = [[c alloc] initWith:[_objects objectAtIndex:indexPath.row] imageName:[NSString stringWithFormat:@"%d",indexPath.row] delegate:cell.imageView];
[queue addOperation:o];
cell.imageView.image= [UIImage imageNamed:@"placeholder.png"];
} 注: 保存一下测试图片 urls

http://blog.csdn.net/deep_explore/article/details/8144613

原网址

iOS UIImage DownLoad图片的下载缓存全部在此的更多相关文章

  1. ios UIImage 圆形图片剪切方案

    @interface UIImage (Resize) //按形状切割图像 - (UIImage*)cutImageWithRadius:(int)radius; @end //图片剪切 - (UII ...

  2. iOS利用SDWebImage图片下载缓存

    一.我们先来了解一下SDWebImage的使用: 1.导入框架,引入头文件: #import "UIImageView+WebCache.h" 也可以直接使用CocoaPods来引 ...

  3. ios -- cell的图片下载

    1.面试题 1> 如何防止一个url对应的图片重复下载 * “cell下载图片思路 – 有沙盒缓存” 2> SDWebImage的默认缓存时长是多少? * 1个星期 3> SDWeb ...

  4. IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)

    编写一个如下界面,实现: 1.在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中. 2.点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload ...

  5. 毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选

    毕加索的艺术--Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选 官网: http://square.github.i ...

  6. ios中asihttprequest 下载缓存

    asi中下载缓存第一种方法 #import <UIKit/UIKit.h> #import "ASIHTTPRequest.h" #import "ASIDo ...

  7. picasso_强大的Android图片下载缓存库

    tag: android pic skill date: 2016/07/09 title: picasso-强大的Android图片下载缓存库 [本文转载自:泡在网上的日子 参考:http://bl ...

  8. android开源项目:图片下载缓存库picasso

    picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能. picasso有如下特性: 在a ...

  9. iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView

    iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView 时间:2016-01-19 19:13:43      阅读:630      评论:0      收藏:0   ...

随机推荐

  1. 排序之希尔排序(shell sort)

    前言 本篇博客是在伍迷兄的博客基础上进行的,其博客地址点击就可以进去,里面好博客很多,我的排序算法都来自于此:一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中都有详细讲解,而我写这些博客只是记录自 ...

  2. Codeforces Round #368 (Div. 2) A. Brain's Photos (水题)

    Brain's Photos 题目链接: http://codeforces.com/contest/707/problem/A Description Small, but very brave, ...

  3. Linux应用总结:自动删除n天前日志

    linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志 ...

  4. 检测iOS的APP性能的一些方法

    首先如果遇到应用卡顿或者因为内存占用过多时一般使用Instruments里的来进行检测.但对于复杂情况可能就需要用到子线程监控主线程的方式来了,下面我对这些方法做些介绍: Time Profiler ...

  5. POJ 2886Who Gets the Most Candies?(线段树)

    POJ 2886 题目大意是说有n个人围成一圈,游戏的起点是k,每个人持有一个数字(非编号)num,每次当前的人退出圈,下一个人是他左边的第num个(也就是说下一个退出的是k+num, k可以为负数, ...

  6. POJ3080Blue Jeans(暴力)

    开始做字符串专题,地址 第一题水题,暴力就可以做 #include <map> #include <set> #include <stack> #include & ...

  7. android 简易定时器

    定时器 1.在android 应用开发当中,很多时候都要用到定时器,而要实现定时器更多的时候要用到两个类:Timer,和TimerTask 2.API对Timer的解释是:

  8. C# try catch finally 执行

    try { //dosomething eg: int a = 1; int b = 2; int c = a + b; if(c>2) { return; } } catch(Exceptio ...

  9. 在类库中使用Session

    昨天在做优化网站代码的时候,突发奇想想将页面的代码和业务逻辑代码分离开.就是页面下的.cs文件只用于收集前台上的数据而业务处理都放到一些类库中.可是问题来了,在类库中是无法直接使用Session.在网 ...

  10. li中包含span,在IE6、IE7下会有3pxbug

    如果给每个li里面加个span标签的话,在IE6,IE7下看,li与li之间的距离就会多了3px. 解决方法:在li中加vertical-align:middle; <div class=&qu ...