图片的异步下载

////////下载图片////////

//方法一(暴力而有效,必须下载完才进入页面)同步

NSURL *url = [NSURL URLWithString:@"http://cc.cocimg.com/bbs/attachment/upload/07/128707.png"];

UIImage *imga = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:url]];

img1.image=imga;

//方法二 (需要等下载完才显示,但照样可以进入页面)异步

NSString *[email protected]"http://tp1.sinaimg.cn/2122519000/50/5620445947/1";

UIImageFromURL( [NSURL URLWithString:url2], ^( UIImage * image )

{

img2.image=image;

NSLog(@"----%@",image);

}, ^(void){

NSLog(@"error!");

} );

///////下面是关于读取与写入Documents的//////////

UIImage *bear=[UIImage imageNamed:@"image.png"];

//Document创建一个列表中的目录搜索路径。获得应用程序的Documents文件夹

NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

// NSString *paths = [pathArray lastObject];

NSString *uniquePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]

stringByAppendingPathComponent:@"image.png"];

/*写入图片*/

//帮文件起个名

//NSString *uniquePath=[[paths stringByAppendingPathComponent:@"image" ] stringByAppendingPathComponent:@"image.png"];

//将图片写到Documents文件中

//拿到PNG格式的图像对象

[UIImagePNGRepresentation(bear)   writeToFile: uniquePath    atomically:YES];

/*读取入图片*/

//因为拿到的是个路径,所以把它加载成一个data对象

NSData *data=[NSData dataWithContentsOfFile:uniquePath];

//直接把该图片读出来

img3.image=[UIImage imageWithData:data];

[super viewDidLoad];

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

}

- (void)dealloc {

[img1 release];

[img2 release];

[img3 release];

[super dealloc];

}

#pragma mark - 方法二

//

void UIImageFromURL( NSURL * URL, void (^imageBlock)(UIImage * image), void (^errorBlock)(void) )

{

//提出了一个用于在调度队列异步执行块并立即返回。

dispatch_async( dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^(void)

{

NSData * data = [[[NSData alloc] initWithContentsOfURL:URL] autorelease];

UIImage * image = [[[UIImage alloc] initWithData:data] autorelease];

//返回应用程序的主线程关联的串行调度队列。

dispatch_async( dispatch_get_main_queue(), ^(void){

if( image != nil )

{

imageBlock( image );

} else {

errorBlock();

}

});

});

}

@end

时间: 2024-10-25 15:49:54

图片的异步下载的相关文章

进击的UI---------------------沙盒,复杂对象写入&KVO,图片的异步下载

第十八节笔记 1.SandBox 2复杂对象写入 第十七节笔记 1KVO 2图片异步下载

使用webClient实现图片同步,异步下载

WebClient.DownloadFile 方法 将具有指定 URI 的资源下载到本地文件. 命名空间:System.Net 程序集:System(在 system.dll 中) 同步实现参考代码: private void btnsyndownload_Click(object sender, EventArgs e){File.Delete("download.jpg");try{if (!File.Exists("download.jpg")){WebCli

UI_18 图片异步下载、KVO

一.异步下载图片ImageViewDownloader 图?下载是iOS开发中常?的功能,但系统并未提供图?下载类. 为了便于后续使?,可以将图?下载封装到?个类?? (ImageDownloader) 新建SingleViewApplication,使用默认的Storyboard,向其中添加一个Button一个ImageView并关联属性.添加事件.点击Button实现异步下载并显示图片.AsynImageDownloader类封装了下载图片的方法. 使用代理进行AsynImageDownlo

swift详解之十四 -----------NSThread 异步下载图片

NSThread 异步下载图片 在IOS中处理多线程有三个方案 , NSThread .NSOperation .GCD .当然GCD应该是最方便的 ,我们一个一个学 .先理解底层的,最后再使用最方便的 . NSThread: 优点:NSThread 比其他两个轻量级 缺点:需要自己管理线程的生命周期,线程同步.线程同步对数据的加锁会有一定的系统开销 我们先研究下用NSThread 异步加载网络图片 : NSThread有两种创建方式 ,一种是通过实例方法.一种是通过类方法. let threa

框架--------异步下载图片(避免OOM)

一.简介 异步下载图片,图片保存在内存和SD卡中. 优点:简洁,用起来方便. 二.地址和支持的版本 下载地址:https://github.com/thest1/LazyList 再贴个地址:http://download.csdn.net/detail/mwj_88/7964883 支持版本:2.0+ 三.用法 定义一个ImageLoader实例,然后调用其DisplayImage()即可,最后记得清除缓存. [java] view plaincopy ImageLoader imageLoa

异步下载图片的综合应用

1.要解决的问题. 给单元格设置从网络上下载的图片. 2.思路: >1.先同步下载 bug:下载是一个耗时操作,会阻塞主线程 >2.异步下载图片 bug:图片发生错行. >从网络上请求下来的图片与单元格不匹配.为什么会这样?根本原因是因为重用单元格. 如图所示. tableView上有3个单元格.每个单元格有图片,文字.文字是通过plist加载,当向上滚动单元格,让,单元格1滚出界面,那么就会加载第4个单元格,第四个单元格仍然是新创建的,因为当单元格1尚未滚出视图,单元格4已经出来一部分

BitmapCache-master图片异步下载缓存

BitmapCache-master图片异步下载缓存 实现图片下载和缓存功能,可以将图片下载之后缓存到内存或者SD卡中.图片第一次从互联网下载之后,就会缓存到内存或者SD卡中.第二次再打开浏览时,就无需再从互联网下载,而是直接从内存或者SD卡中读取. 效果图说:第一幅图是第一次打开应用,所有图片都来自互联网,第二幅图是第二次打开应用,可以看到部分图片来自缓存,部分图片来自互联网. 下载地址:http://www.devstore.cn/code/info/903.html 运行截图:  

Android多线程分析之一:使用Thread异步下载图像

罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 打算整理一下对 Android Framework 中多线程相关知识的理解,主要集中在 Framework 层的 Thread, Handler, Looper, MessageQueue, Message, AysncTask,当然不可避免地要涉及到 native 方法,因此也会分析 dalvik 中和线程以及消息处理相关的代码:如 dalvik 中的 C++ Thread 类以及 Message

Android多线程分析之五:使用AsyncTask异步下载图像

Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<Android多线程分析之中的一个:使用Thread异步下载图像>中.曾演示了怎样使用 Thread 来完毕异步任务. Android 为了简化在 UI 线程中完毕异步任务(毕竟 UI 线程是 app 最重要的线程).实现了一个名为 AysncTask 的模板类.使用 AysncTask 能够在异步任务进行的同