ASINetworkQueue 队列下载
我们通过一个例子介绍一下请求队列使用,我们设计了一个应用,用户点击GO按钮从服务器同时下载两张图片显示在画面中。
我们直接看看主视图控制器ViewController.h代码如下:
#import “ASIHTTPRequest.h”
#import “ASINetworkQueue.h”
#import “NSNumber+Message.h”
#import “NSString+URLEncoding.h”
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIImageView *imageView1;
@property (weak, nonatomic) IBOutlet UIImageView *imageView2;
@property (strong) ASINetworkQueue *networkQueue;
- (IBAction)onClick:(id)sender;
@end
我们需要引入ASI框架的两个头文件ASIHTTPRequest.h和ASINetworkQueue.h。其中imageView1和 imageView2是与画面对应的两个图片视图控件。还定义了ASINetworkQueue 类型的networkQueue属性。我们直接看看主视图控制器ViewController.m中点击GO按钮调用方法,代码如下:
- (IBAction)onClick:(id)sender {
if (!_networkQueue) {
_networkQueue = [[ASINetworkQueue alloc] init]; ①
}
// 停止以前的队列
[_networkQueue cancelAllOperations]; ②
// 创建ASI队列
[_networkQueue setDelegate:self];
[_networkQueue setRequestDidFinishSelector:@selector(requestFinished:)]; ③
[_networkQueue setRequestDidFailSelector:@selector(requestFailed:)]; ④
[_networkQueue setQueueDidFinishSelector:@selector(queueFinished:)]; ⑤
for (int i=1; i<3; i++) {
NSString *strURL = [[NSString alloc] initWithFormat:
@”http://iosbook3/download.php?email=%@&FileName=test%i.jpg”,
@”<你的iosbook1.com用户邮箱>”,i];
NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
request.tag = i; ⑥
[_networkQueue addOperation:request]; ⑦
}
[_networkQueue go]; ⑧
}
我们再看看它们的回调方法,代码:
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSData *data = [request responseData];
NSError *eror;
NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingAllowFragments error:&eror];
if (!resDict) {
UIImage *img = [UIImage imageWithData:data];
if (request.tag ==1) { ①
_imageView1.image = img;
} else {
_imageView2.image = img;
}
} else {
NSNumber *resultCodeObj = [resDict objectForKey:@"ResultCode"];
NSString *errorStr = [resultCodeObj errorMessage];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@”错误信息”
message:errorStr
delegate:nil
cancelButtonTitle:@”OK”
otherButtonTitles: nil];
[alertView show];
}
if ([_networkQueue requestsCount] == 0) { ②
[self setNetworkQueue:nil];
}
NSLog(@”请求成功”);
}
- (void)requestFailed:(ASIHTTPRequest *)request ③
{
NSError *error = [request error];
NSLog(@”%@”,[error localizedDescription]);
if ([_networkQueue requestsCount] == 0) {
[self setNetworkQueue:nil];
}
NSLog(@”请求失败”);
}
- (void)queueFinished:(ASIHTTPRequest *)request ④
{
if ([_networkQueue requestsCount] == 0) {
[self setNetworkQueue:nil];
}
NSLog(@”队列完成”);
}
requestFinished:方法是请求对象成功回调方法,因此有两个请求对象它会被调用两次,在第①行代码中我们根据GO按钮点击事件设定的 请求对象的tag属性,来判断是哪个请求对象的回调。进而加载到显示不同的图片视图。第②代码[_networkQueue requestsCount]可以判断队列中请求对象的个数。
//其他。。。
[networkQueueForSong reset];
//下载队列代理方法
[networkQueueForSong setRequestDidFailSelector:@selector(singleDownLoadFail:)];
[networkQueueForSong setRequestDidFinishSelector:@selector(singleDownloadFinished:)];
[networkQueueForSong setRequestDidReceiveResponseHeadersSelector:@selector(downLoadReceiveResponseHeader:)];
[networkQueueForSong setRequestDidStartSelector:@selector(singleDownLoadStart:)];
[networkQueueForSong setQueueDidFinishSelector:@selector(downLoadFinish)];
[networkQueueForSong setDelegate:self];
//设置下载队列属性,设置为1只允许下完一首再下另一首,默认是并行下载不分前后
[networkQueueForSong setMaxConcurrentOperationCount:1];
ASINetworkQueue 队列下载的更多相关文章
- 资源:Kafka消息队列下载路径
Kafka下载路径 http://kafka.apache.org/downloads.html
- ASIHTTPRequest下载示例(支持断点续传)
一.创建网络请求队列 首先,创建网络请求队列,如下: ASINetworkQueue *que = [[ASINetworkQueue alloc] init]; self.netWorkQueu ...
- 关于路径的使用,assi下载和
直接给一个路径下载图片,这函数直接使用assi -(void)downloadWithURL:(NSString*)RequestUrl SavePath:(NSString*)savepath wi ...
- 【iOS系列】-多图片多线程异步下载
多图片多线程异步下载 开发中非常常用的就是就是图片下载,我们常用的就是SDWebImage,但是作为开发人员,不仅要能会用,还要知道其原理.本文就会介绍多图下载的实现. 本文中的示例Demno地址,下 ...
- 自定义NSOperation下载图片
自定义NSOperation的话,只是需要将要下载图片的操作下载它的main方法里面,考虑到,图片下载完毕,需要回传到控制器里,这里可以采用block,也可以采用代理的方式实现,我采用的是代理的方式实 ...
- [ActionScript 3.0] File下载工具
更新数据原理,访问接口,将服务器数据抓取并下载到本地的临时文件夹,当所有下载完成,卸载客户端内容,出现升级界面,此时移动下载的内容到目标文件夹,移动完成再重新加载客户端,访问接口,下载文件,移动文件均 ...
- 安卓开发实战之app之版本更新升级(DownloadManager和http下载)完整实现
转载: https://blog.csdn.net/u013278099/article/details/52692008 前言 本文将讲解app的升级与更新.一般而言用户使用App的时候升级提醒有两 ...
- iOS:ASIHttpRequest虽不更新,但仍值得详细了解
一.使用ASIHTTPRequest可以很方便的进行一下操作:同步/异步方式下载数据,定义下载队列,让队列中的任务按指定的并发数来下载(队列下载必须是异步的),提交表单,文件上传,处理cookie,设 ...
- 第三方苹果开发库之ASIHTTPRequest(翻译版)
本文转载至 http://www.cnblogs.com/daguo/archive/2012/08/03/2622090.html 来自:http://www.dreamingwish.com/ ...
随机推荐
- jsp页面中的代码执行加载顺序介绍
1. java是在服务器端运行的代码,jsp在服务器的servlet里运行,而javascript和html都是在浏览器端运行的代码.所以加载执行顺序是是java>jsp>js. 2. j ...
- 李洪强-C语言6-控制结构
C语言流程控制 一.流程控制结构 (1)顺序结构:按书写顺序执行每一条语句. (2)选择结构:对给定的条件进行判断,根据判断结果决定执行哪一段代码. (3)循环结构:在给定条件成立的情况下,反复执行某 ...
- Function Scope
JavaScript’s function scope means that all variables declared within a function are visi-ble through ...
- The Stable Marriage Problem
经典稳定婚姻问题 “稳定婚姻问题(The Stable Marriage Problem)”大致说的就是100个GG和100个MM按照自己的喜欢程度给所有异性打分排序.每个帅哥都凭自己好恶给每个MM打 ...
- thinkphp模板中foreach循环没数据的错误解决
从控制器方法中$this->assign();函数将值传递给html模板 但是模板不显示数据,直接出来的是代码,效果就和html中写了php代码不能解析一样. 原来是我将thinkphp框架的引 ...
- Html - Bootstrap Panel面板
http://v3.bootcss.com/components/#panels Bootstrap Panel面板 <div class="panel panel-default&q ...
- Scrum会议5
组名称:天天向上 项目名称:连连看 参会成员:王森(Master)张金生 张政 栾骄阳 时间:2016.10.20 已完成内容: 1.游戏中实现了两个按钮消除的算法. 2.在游戏中加入了音乐. 计划完 ...
- SSH+Oracle10G抛Disabling contextual LOB creation as createClob() m
在使用Oracle10G时候,实体类使用了CLOB字段,结果抛了Disabling contextual LOB creation as createClob() method threw error ...
- ORA-12518: TNS: 监听程序无法分发客户机连接
在团队成员增多时,经常出现“无法分发客户端连接”等问题.在网上搜索一番后,最终解决了该问题,现将解决方案总结如下,以供参考和以后备用. 原因:团队成员增多,原有数据库设置不够用,导致连接plsql和启 ...
- jiffies
linux中的jiffies变量 全局变量jiffies用来记录自系统启动以来产生的节拍的总数.启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值.一秒内时钟中断的次数等于H ...