数据下载 - delegate 形式的异步请求

下载数据可以使用同步请求,异步请求

之前有讲到NSString 、 NSData 类型的同步请求

有NSURLConnection 形式的同步请求

异步请求有block 形式的异步请求,我们需要创建一个队列 在block 内部实现

但是我们最常用的是 delegate 形式的异步请求

#import "ViewController.h"

@interface ViewController ()<NSURLConnectionDataDelegate>

@property(nonatomic,weak)IBOutlet UIButton *button;
@property(nonatomic,weak)IBOutlet UIImageView *imageView;
@property(nonatomic,weak)IBOutlet UIProgressView *progressView;

@property(nonatomic,retain)NSString *myURLStr;
@property(nonatomic,retain)NSMutableData *result;
@property(nonatomic,assign)float totalSize;

@end

@implementation ViewController

//懒加载
-(NSMutableData *)result
{
    if(_result == nil)
    {
        //_result = [[NSMutableData alloc]init];
        _result = [NSMutableData data];
    }
    return _result;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

-(IBAction)downloadBegin:(id)sender{
    self.myURLStr = @"http://farm3.staticflickr.com/2846/9823925914_78cd653ac9_b_d.jpg";
    //self.myURLStr = @"http://photo.candou.com/i/114/826ea823e8ffe792a6fda9e126f6c404";

    //[self syncDownloadWithConnection];
    //[self asyncDownloadWithBlock];
    [self asyncDownloadWithDelegate];
}
//连接有相应,开始下载
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

    self.progressView.hidden = NO;
    //获取数据的总长度
    self.totalSize = response.expectedContentLength;

    NSLog(@"%@",NSStringFromSelector(_cmd));
}

//调用表示正在接受数据 根据大小反复不间断接受
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [self.result appendData:data];

    float pv = self.result.length /self.totalSize;

    self.progressView.progress = pv;

    NSLog(@"下载进度%f",pv);
    NSLog(@"%@",NSStringFromSelector(_cmd));

}
//调用证明下载完毕
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    self.progressView.hidden = YES;

    self.imageView.image = [UIImage imageWithData:self.result];
    NSLog(@"%@",NSStringFromSelector(_cmd));
}
//连接发生错误 下载失败
//1.断网了
//2.网址出错了
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    self.progressView.hidden = YES;

    NSLog(@"%@",NSStringFromSelector(_cmd));
    NSLog(@"下载失败");
}
#pragma mark -NSURLConnection异步请求-
//Delegate 形式的异步请求

-(void)asyncDownloadWithDelegate{
    NSURL *url = [NSURL URLWithString:self.myURLStr];

    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];

    self.result.length = 0;

    [NSURLConnection connectionWithRequest:request delegate:self];

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-09 08:57:58

数据下载 - delegate 形式的异步请求的相关文章

数据下载-block 形式的异步请求

这里给大家写了一个方法 ,我们使用block 进行数据异步下载 //block 形式的异步请求 -(void)asyncDownloadWithBlock{ //菊花 [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; //将字符串转化成URL 地址 NSURL *url = [NSURL URLWithString:self.myURLStr]; //创建一个对象 NSURLRequest *requ

Springmvc中 同步/异步请求参数的传递以及数据的返回

注意: 这里的返回就是返回到jsp页面 **** controller接收前台数据的方式,以及将处理后的model 传向前台***** 1.前台传递数据的接受:传的属性名和javabean的属性相同 (1).使用基本类型,或引用类型进行接受: @RequestMapping(value="/select") PublicString  select(String name,int age,Model model){ // 这样这里的name,age 就是我们前台传递的参数,也是我们Ja

ajax,同步请求 ,异步请求

同步请求,异步请求 ,这样的字眼我想既然你能看到这篇文章并且点击进来 ,说明我们应该是听过他的,并且 听得次数还不少,说到异步请求 ,首先我想到就是ajax, ajax的问题一会再说,今天我突然想到,我们平时都会 尽量的去 用ajax使用异步 的方式请求数据, 那么你知道到底是同步请求的数据更快,还是异步请求的数据更快吗? 异步传输是面向字符的传输,它的单位是字符:而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的. 同步传输通常要比异步传输快速得多.接收

关于异步请求AJAX的详解

1,异步请求的方法步骤: 1,判断当前用户支持的浏览器类型 XMLHttpRequest:判断是否支持非IE浏览器,对应的创建方法:xmlhttp = new XMLHttpRequest(); window.ActiveXObject:判断是否支持IE浏览器,对应的创建方法:xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 2,开辟连接创建路径 xmlhttp.open(参数一,参数二,参数三); 参数一:请求的方式get  post

关于异步请求AJAX的具体解释

1,异步请求的方法步骤: 1,推断当前用户支持的浏览器类型 XMLHttpRequest:推断是否支持非IE浏览器,相应的创建方法:xmlhttp?=?new?XMLHttpRequest(); window.ActiveXObject:推断是否支持IE浏览器,相应的创建方法:xmlhttp?=?new?ActiveXObject("Microsoft.XMLHTTP"); 2,开辟连接创建路径 xmlhttp.open(參数一,參数二,參数三); 參数一:请求的方式get??post

同步请求和异步请求的区别(理解ajax用)

同步请求:发送方发送数据包后,等待接收方发回响应之后,才能发送下一个数据包的通信方式. 异步请求:发送方发送数据包后,不用等待接收方发回响应,就可以发送下一个数据包的通信方式. 同步通信:要求通信双方在相同的时钟频率下,并且准确协调,是通过共享单个时钟或定时脉冲源来保证双方准确同步,效率高. 异步通信:不要求通信双方同步,双方可采用各自的时间源,遵循异步通信协议,以字符为数据传输单位,发送字符的时间间隔不确定,发送效率较同步通信低. 同步请求:通过单线程服务,该线程发送请求,在服务器运行时阻塞,

ajax异步请求模式

什么是异步请求 我们知道,在同步请求模型中,浏览器是直接向服务器发送请求,并直接接收.处理服务器响应的数据的.这就导致了浏览器发送完一个请求后,就只能干等着服务器那边处理请求,响应请求,在这期间其它事情都做不了.这就像是你到了一个新城市去找房子住,你可以自己去找,在网站上或者是街头小广告上去了解房源信息,找合适自己的那一个,然后去跟房东谈价钱.在这期间你的精力和时间大部分都用到了找房子上,你可能没时间再去找工作或者做其他的事情了.还有一种方式是你找一个租房中介,找你一个代理人,把你的需求告诉他让

ASIHTTP 框架,同步、 异步请求、 上传 、 下载

ASIHTTPRequest详解 ASIHTTPRequest 是一款极其强劲的 HTTP 访问开源项目.让简单的 API 完成复杂的功能,如:异步请求,队列请求,GZIP 压缩,缓存,断点续传,进度跟踪,上传文件,HTTP 认证.在新的版本中,还加入了 Objective-C 闭包 Block 的支持,让我们的代码加轻简灵活. 下面就举例说明它的 API 用法. 发起一个同步请求 同步意为着线程阻塞,在主线程中使用此方法会使应用Hang住而不响应任何用户事件.所以,在应用程序设计时,大多被用在

网络请求数据(同步GET,异步GET)

////GET:将请求所需要传的参数,直接封装到URL中,缺点:1.不安全  2.url长度有限制,如果参数较多,会封装失败,导致无法请求 //POST:包含基础的url以及参数体,也就是说,参数跟url是分开的,比较安全且不用顾虑url的长度 //同步:当执行某个操作时,只有当其完全执行结束,才回去执行下面的操作,缺点:如果遇到耗时操作,会比较卡//异步:多个任务同时执行 #import "ViewController.h" #define BaseUrl @"http:/