HTTP_异步下载

//创建imageVIew对象

- (void)createImageView

{

UIImageView *imageView = [[UIImageView alloc]init]; //1

imageView.frame = CGRectMake(30, 120, 300, 400);

imageView.backgroundColor = [UIColor redColor];

[self.view addSubview:imageView];//2

//[imageView release] //1(ARC内存管理系统自动释放)

_imageView = imageView;

}

//创建下载按钮

- (void)createBtn

{

UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];

btn.frame = CGRectMake(50, 50, 200, 50);

[btn setTitle:@"下载数据" forState:UIControlStateNormal];

btn.titleLabel.font = [UIFont systemFontOfSize:26];

btn.backgroundColor = [UIColor orangeColor];

[btn addTarget:self action:@selector(downLoadData) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

}

//实现下载数据方法

- (void)downLoadData

{

//1.创建url对象

NSURL *url = [NSUR URLWithString:@"http://a.hiphotos.baidu.com/image/w%3D310/sign=72d5d600362ac65c67056072cbf3b21d/8435e5dde71190ef3e9498bfcd1b9d16fdfa6066.jpg"];

//2.创建请求对象

NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];

//3.创建异步下载连接对象

//参数1:请求对象

//参数2:代理对象,由于是异步下载,则调用了这行代码后会立即执行后续的代码,只有通过代理对象实现协议的方法来接收服务器传过来的信息

//参数3:开始标志,是否立即启动yes:立即启动 no:手动启动(需调用start方法)

NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];

//同步下载数据,会让UI主线程阻塞,因为主线程会一直等待数据下载完成或者下载出错返回才能继续往下执行进入事件循环当中(runLoop)

//异步下载数据,UI主线程会开启一个新的线程,然后让线程去做下载的事情,然后立马往下执行进入事件循环,并且通过代理协议传递给代理对象处理相应的数据或调用方法处理数据

//4.手动开始启动连接(通过三次握手建立连接)

[conn start];

}

#pragma mark-连接协议方法 NSURLConnectionDelegate

//1.传输失败调用方法

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

NSLog(@"传输失败,error=%@",error);

}

#pragma mark-连接数据协议方法 NSURLConnectionDataDelegate

//1.收到应答包调用方法

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

NSLog(@"收到应答包,responese=%@",response);

}

//2.收到数据包调用方法,这个方法会被调用多次

//当数据比较大的时候,服务器会将数据分块传输

//当本地有缓存时,这个方法只调用一次,即在获取到本地缓存的数据时调用

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

NSLog(@"收到数据");

//2.1保存每次取到的数据,因为数据可能会分多次传输

[_data appendData:data];

}

//3.结束传输数据调用方法

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{

NSLog(@"下载完成");

//3.1将数据转成图片对象

UIImage *image = [UIImage imageWithData:_data];

//3.2将图片对象传给imageView

_imageView.image = image;

//3.3清空保存的数据

[_data setLength:0];

}

时间: 2024-10-10 02:59:57

HTTP_异步下载的相关文章

UI_18 图片异步下载、KVO

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

android开发步步为营之67:使用android开源项目android-async-http异步下载文件

android-async-http项目地址 https://github.com/loopj/android-async-http,android-async-http顾名思义是异步的http请求,不过它也支持同步请求的,本文主要使用了android-async-http做异步请求下载文件.每当app需要更新新版本的时候,就需要用到下载功能的,经研究android-async-http这个第三方开源项目还是挺好用的,这里介绍给大家.     1.下载类DownloadManager.java

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 能够在异步任务进行的同

winform自动更新并实现文件的批量异步下载

public partial class update : Form    {        private WebClient client;        int downfilenum = 0; //已下载文件数        int downlistnum = 0;//总下载文件数        List<string> list;        private string URl;        private string fileName;        private con

网络数据的下载(NSUrlconnection异步下载和NSstring同步下载)和UI界面数据的刷新(都是抛弃第三方库的一些本质)

<1>NSString同步下载        //字符串的类方法,会根据url向服务器发起同步的数据请求,并将请求结果作为返回值    //同步请求数据,会对程序的UI主线程造成阻塞,用户体验极差 NSString *str = [NSString stringWithContentsOfURL:[NSURL URLWithString:kUrl] encoding:NSUTF8StringEncoding error:nil];    //json格式的数据 进行json解析 数据最外层是

javascript异步下载 Promise实现

一般下载都是直接打开一个链接就行.var URL = 'XXXX';window.open(URL)其实这样会有些问题:1. 浏览器禁止打开新窗口,导致无法下载 那么怎么解决呢?这样: 1 <a href="http://somehost/somefile.zip" download="filename.zip">Download file</a> 注意download属性,它说明要下载,并且文件名:filename.zip 那么如何异步下载

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

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

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

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