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. 理解js闭包(二)

    @(编程) 一.什么是闭包? 官方"的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相信很少有人能直接看懂这句话,因为他 ...

  2. AVAST 4.8

    AVAST专业版注册序列号不能用了就换一个继续注册,接着用序列号:S9665355R9665P1106-YCX4AKKT (2012.5.3)S7592769R8591F1106-ZVDJPMLT ( ...

  3. 实现LoadRunner多个场景的顺序执行

    应用场景假设有3个不同的测试场景,分别为并发登录.核心业务.可靠性测试,3个场景有先后执行顺序.由于白天测试机器另有用处,只能在晚上进行性能测试,这时我们的期望是能否把测试场景都设定好之后晚上自动运行 ...

  4. python 遍历删除日志

    #! /usr/bin/python2.6#-*- encoding:UTF-8 -*- import osimport os.pathimport time root_dir = os.getcwd ...

  5. 30几个HTML5经典动画应用回顾 让你大饱眼福

    周末大放送,让我们来回顾一下HTML5经典动画应用,一定会让你大饱眼福. 1.HTML5 Canvas画板画图工具 可定义笔刷和画布 HTML5 Canvas还有一个比较实用的应用,那就是网络画板,这 ...

  6. 第三次作业随笔(new)包含了补作业

    第三次作业的题目:http://www.cnblogs.com/fzuoop/p/5187275.html 第一次看到题目的时候觉得应该是挺简单的,只要把输入的那一串东西挨个判断,用数列的方法,如果碰 ...

  7. UVa 1620 Lazy Susan (找规律)

    题意:给 n 个数,每次可以把4个连续的数字翻转,问你能不能形成1-n的环状排列. 析:找一下奇偶性,写几个数试试,就会找到规律. 代码如下: #include <cstdio> #inc ...

  8. GC: 垃圾回收算法

    标记-清除算法标记-清除(Mark-Sweep)算法是最基础的算法,就如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象.之所以说 ...

  9. Android 解析JSONObject以及JSONArray对比

    在Android客户端与服务器交互的过程中,客户端一般采用json解析服务器的返回数据.此时有两种数据格式.但其根本都是字符串或字符串数组! 1.JSONObject 下面是PHP端代码: <? ...

  10. JQuery 的bind和unbind函数

    测试:页面代码:<body>     <input type="button" name="aaa" value="点击我" ...