ASINetworkQueues(经典2)
ASINetworkQueues, 它的delegate提供更为丰富的功能
提 供的更多的回调方法如下: a,requestDidStartSelector,请求发起时会调此方法,你可以在此方法中跟据业务选择性的设置request对象的 deleaget。 b,requestDidReceiveResponseHeadersSelector,当接受完响应的Header后设计此方法,这个对下载大数据的 时候相当有用,你可以在方法里做更多业务上的处理。 c,requestDidFinishSelector,请求并响应成功完成时调用此方法 d,requestDidFailSelector,请求失败 e,queueDidFinishSelector,整个队列里的所有请求都结束时调用此方法。
| 它是NSOperationQueues的扩展,小而强大。但也与它的父类略有区别。如,仅添加到队列中其实并不能执行请求,只有调用[ queue g o]才会执行;一个正在运行中的队列,并不需要重复调用[ queue go ]。
默认情况下,队列中的一个请求如果失败,它会取消所有未完成的请求。可以设置[ queue setShouldCancelAllRequestsOnFailure:NO ]来修 正。 |
取消异步请求
首先,同步请求是不能取消的。 其次,不管是队列请求,还是简单的异步请求,全部调用[ request cancel ]来取消请求。
| 取消的请求默认都会按请求失败处理,并调用请求失败delegate。 如果不想调用delegate方法,则设置:[ request clearDelegatesAndCancel]; |
队 列请求中需要注意的是,如果你取消了一个请求,队列会自动取消其它所有请求。 如果只想取消一个请求,可以设置队列:[ queue setShouldCancelAllRequestsOnFailure:NO ]; 如果想明确取消所有请求:[ queue cancelAllOperations ];
安全的内存回收建议
request并没有retain你的delegate,所以在没有请求完的时候释放了此delegate,需要在dealloc方法里先取消所有请求,再释放请求实例,如:
- (void)dealloc{ [request clearDelegatesAndCancel]; [request release]; ... [superdealloc];} |
向服务器端上传数据
ASIFormDataRequest ,模拟 Form表单提交,其提交格式与 Header会自动识别。 没有文件:application/x-www-form-urlencoded 有文件:multipart/form-data
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];[request setPostValue:@"Ben"forKey:@"first_name"];[request setPostValue:@"Copsey"forKey:@"last_name"];[request setFile:@"/Users/ben/Desktop/ben.jpg"forKey:@"photo"];[request addData:imageData withFileName:@"george.jpg"andContentType:@"image/jpeg"forKey:@"photos"]; |
如果要发送自定义数据:
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];[request appendPostData:[@"This is my data" dataUsingEncoding:NSUTF8StringEncoding]];// Default becomes POST when you use appendPostData: / appendPostDataFromFile: / setPostBody:[request setRequestMethod:@"PUT"]; |
下载文件
通 过设置request的setDownloadDestinationPath,可以设置下载文件用的下载目标目录。 首先,下载过程文件会保存在temporaryFileDownloadPath目录下。如果下载完成会做以下事情: 1,如果数据是压缩的,进行解压,并把文件放在downloadDestinationPath目录中,临时文件被删除 2,如果下载失败,临时文件被直接移到downloadDestinationPath目录,并替换同名文件。
如果你想获取下载中的所有数据,可以实现delegate中的request:didReceiveData:方法。但如果你实现了这个方法,request在下载完后,request并不把文件放在downloadDestinationPath中,需要手工处理。
获取响应信息
信息:status , header, responseEncoding
[request responseStatusCode];[[request responseHeaders] objectForKey:@"X-Powered-By"]; [request responseEncoding]; |
获取请求进度
有两个回调方法可以获取请求进度, 1,downloadProgressDelegate,可以获取下载进度 2,uploadProgressDelegate,可以获取上传进度
cookie的支持
如 果Cookie存在的话,会把这些信息放在NSHTTPCookieStorage容器中共享,并供下次使用。 你可以用[ ASIHTTPRequest setSessionCookies:nil ] ; 清空所有Cookies。 当然,你也可以取消默认的Cookie策略,而使自定义的Cookie:
//Create a cookieNSDictionary *properties = [[[NSMutableDictionary alloc] init] autorelease];[properties setValue:[@"Test Value" encodedCookieValue] forKey:NSHTTPCookieValue];[properties setValue:@"ASIHTTPRequestTestCookie"forKey:NSHTTPCookieName];[properties setValue:@".allseeing-i.com"forKey:NSHTTPCookieDomain];[properties setValue:[NSDate dateWithTimeIntervalSinceNow:60*60] forKey:NSHTTPCookieExpires];[properties setValue:@"/asi-http-request/tests"forKey:NSHTTPCookiePath];NSHTTPCookie *cookie = [[[NSHTTPCookie alloc] initWithProperties:properties] autorelease]; //This url will return the value of the 'ASIHTTPRequestTestCookie' cookierequest = [ASIHTTPRequest requestWithURL:url];[request setUseCookiePersistence:NO];[request setRequestCookies:[NSMutableArray arrayWithObject:cookie]];[request startSynchronous]; //Should be: I have 'Test Value' as the value of 'ASIHTTPRequestTestCookie'NSLog(@"%@",[request responseString]); |
ASINetworkQueues(经典2)的更多相关文章
- 回首经典的SQL Server 2005
原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com SQL Server是我使用时间最长的数据库,算起来已经有10年了.上世纪90年代,微软在软件开发的所有领域高歌猛 ...
- 微软Azure 经典模式下创建内部负载均衡(ILB)
微软Azure 经典模式下创建内部负载均衡(ILB) 使用之前一定要注意自己的Azure的模式,老版的为cloud service模式,新版为ARM模式(资源组模式) 本文适用于cloud servi ...
- Express 教程 01 - 入门教程之经典的Hello World
目录: 前言 一.Express?纳尼?! 二.开始前的准备工作 三.测试安装之经典的Hello World 四.使用express(1)来生成一个应用程序 五.说明 前言: 本篇文章是建立在Node ...
- 赠书:HTML5 Canvas 2d 编程必读的两本经典
赠书:HTML5 Canvas 2d 编程必读的两本经典 这两年多一直在和HTML5 Canvas 打交道,也带领团队开发了世界首款基于HTML5 Canvas 的演示文档工具---AxeSlide( ...
- 虚拟机体验之 VirtualBox 篇 —— 性能强大的经典架构
前两篇体验了 QEMU 和经过 KVM 加速的 QEMU,并体验了第三方虚拟机管理工具 virt-manager,让我们见识了开源社区的强大和开源虚拟机软件的高质量和高性能.这一篇,我来剖析一下 Vi ...
- Atitit MATLAB 图像处理 经典书籍attilax总结
Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...
- 在Windows Server 2012中如何快速开关桌面上经典的“计算机、我的文档”等通用图标
我们都知道,在Windows Server 2012系列的服务器版本中都已经引入了Modern的现代界面作为默认的用户交互界面,同时满足视觉一致化,新版的服务器管理程序也做成了扁平化.因此传统的计算机 ...
- Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始
时隔一年,继续我们的Apworks框架之旅.在接下来的文章中,我将逐渐向大家介绍如何在Visual Studio中结合Apworks框架,使用ASP.NET Web API和MVC来开发面向经典分层架 ...
- 【十大经典数据挖掘算法】PageRank
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 我特地把PageRank作为[十大经 ...
随机推荐
- 【C语言入门教程】4.10 综合实例 - 媒体播放器
4.10.1 建立播放列表 数据字典 名称 数据类型 说明 MAX_LENGTH 符号常量 用于定义数组长度,表示列表最大长度 MAX_FILE_LENGTH 符号常量 用于定义数组长度,表示文件名最 ...
- Javascript高级程序设计——基本概念(一)
一.语法 EMCA-262通过叫做ECMAScript的“伪语言”为我们描述了javascript实现的基本概念 javascript借鉴了C的语法,区分大小写,标示符以字母.下划线.或美元符号($) ...
- Java File 常用操作回顾
最近项目中要用到File这个类,温故而知新,回过头来回顾下这个File类,File类主要是对磁盘目录,文件进行操作的Api,具体其实查JDK api 的File全能获取到. 下面写一些文件目录的基本操 ...
- BZOJ 4236: JOIOJI
Description 给出一个字符串,只包含3个字母,询问最长的一个子串,3个字母出现次数相同. Sol map. 如果一个子串满足条件,那么它端点处的三个字母的个数两两差值都是一样的,直接存个状态 ...
- maven简单配置
maven-3.3.9下载 Maven是一个项目管理和综合工具.Maven提供了开发人员构建一个完整的生命周期框架.开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周 ...
- ASP.NET MVC Area使用-将Area设置成独立项目
环境说明:Vistual Studio 2013 MVC 4.0 其实关于ASP.NET MVC Area使用的基础知识可以参考 http://www.cnblogs.com/willick/p/33 ...
- SCP 和 rsync限速以及用法
rsync限速以及用法 -- :: 标签:限速 rsync 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://xficc.blog. ...
- AutoMapper Getting started
AutoMapper 是什么? 为什么要用AutoMapper? 如何使用AutoMapper? 在什么地方配置AutoMapper? 如何测试my mappings? AutoMapper 是什么? ...
- VS中计算程序运行时间
VS中计算程序运行的时间 http://bbs.csdn.net/topics/39068881 有时候在设计程序完了之后需要计算程序运行的时间. 这时候可以使用Windows的库函数 GetIi ...
- 【leetcode】Dungeon Game
Dungeon Game The demons had captured the princess (P) and imprisoned her in the bottom-right corner ...