A.ASI基本知识
1.ASI简单介绍
ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大。
ASI的实现基于底层的CFNetwork框架,因此运行效率很高。
ASI的github地址
 
2.ASI的使用
(1)导入
  下载并导入ASI框架,注意该框架依赖于Reachability.
 
(2)ASI的源码需要设置为非ARC编译:
 
 
ASI依赖框架:
 
B.基本使用
创建请求对象 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
 
1.发送GET & POST请求
(1)GET请求
  1. /** get请求 */
  2. - (void)sendByGet{
  3. // 创建请求
  4. NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/login?user=tom&password=123"];
  5. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
  6.  
  7. // 设置请求
  8. request.timeOutSeconds = ; // 超时时间
  9. request.delegate = self;
  10.  
  11. // 使用selector处理请求返回数据
  12. [request setDidStartSelector:@selector(startRequest)];
  13.  
  14. // 发送请求
  15. [request startSynchronous]; // 同步请求
  16. }
  17.  
  18. /** 请求开始 */
  19. - (void) startRequest
  20. NSLog(@"请求开始")
  21. }
 
(2)POST请求
使用ASIFormDataRequest
  1. - (void) sendByPost2 {
  2. // 创建请求
  3. NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/login"];
  4. self.formRequest = [ASIFormDataRequest requestWithURL:url];
  5.  
  6. // 添加请求参数
  7. [self.formRequest addPostValue:@"tom" forKey:@"user"];
  8. [self.formRequest addPostValue:@"" forKey:@"password"];
  9.  
  10. self.formRequest.completionBlock = ^ {
  11. NSLog(@"请求完毕");
  12. };
  13.  
  14. // 发送请求
  15. [self.formRequest startAsynchronous];
  16. }
 
注意add和set的区别,一个是添加(适用于多值参数),一个是覆盖(内部先remove,再add)。
 
 
2.发送同步 & 异步请求
(1)发送同步请求
[request sendSynchronous];
(2)发送异步请求
[request sendAsynchronous];
 
  1. // 发送请求
  2. [request startSynchronous]; // 同步请求
  3. // [request startAsynchronous]; // 异步请求
 
 
3.处理返回信息
(1)request属性
  • request.error
  • request.responseStatusCode
  • request.responseStatusMessage
  • request.responseData
  • request.responseString
 
发送请求后:
  1. if (request.error) {
  2. NSLog(@"请求出错");
  3. }
 
 
(2)使用代理
遵守 <ASIHTTPRequestDelegate>
 
  1. /** get请求 */
  2. - (void)sendByGet{
  3. // 创建请求
  4. NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/login?user=tom&password=123"];
  5. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
  6.  
  7. // 设置请求
  8. request.delegate = self;
  9. // 发送请求
  10. [request startAsynchronous]; // 异步请求
  11. }
  12.  
  13. #pragma mark - ASIHTTPRequestDelegate
  14. /** 使用代理处理请求事件 */
  15. - (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data {
  16. NSLog(@"正在接受数据");
  17. }
 
(3)使用selector(基于代理方法,会覆盖代理方法)
====>此方法也要设置代理
  1. /** get请求 */
  2. - (void)sendByGet{
  3. // 创建请求
  4. NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/login?user=tom&password=123"];
  5. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
  6.  
  7. // 设置请求
  8. request.delegate = self;
  9.  
  10. // 使用selector处理请求事件
  11. [request setDidStartSelector:@selector(startRequest)];
  12. // 发送请求
  13. [request startAsynchronous]; // 异步请求
  14. }
  15.  
  16. /** 请求开始 */
  17. - (void) startRequest {
  18. NSLog(@"请求开始");
  19. }
 
(4)使用block
开启block:[request setStartedBlock:(void ^block)];
接收数据block:[request setDataReceive:(void ^block)];
结束block:[request setCompletionBlock:(void ^block)];
  1. /** get请求 */
  2. - (void)sendByGet{
  3. // 创建请求
  4. NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/login?user=tom&password=123"];
  5. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
  6.  
  7. // 设置请求
  8. request.timeOutSeconds = ; // 超时时间
  9. request.delegate = self;
  10.  
  11. // 使用block处理请求事件
  12. [request setCompletionBlock:^{
  13. NSLog(@"请求完成!");
  14. }];
  15.  
  16. // 发送请求
  17. [request startAsynchronous]; // 异步请求
  18. }
 
 
4.其实,需要把request作为成员变量,控制器被销毁,切记要先取消、清除request
====> 否则request的response返回的时候会发生野指针错误
  1. @interface ViewController () <ASIHTTPRequestDelegate>
  2. @property(nonatomic, strong) ASIHTTPRequest *request;
  3. @end
  4.  
  5. #pragma mark - dealloc
  6. /** 控制器销毁之前,一定要取消、清除成员request代理 */
  7. - (void)dealloc {
  8. [self.request clearDelegatesAndCancel];
  9. self.request = nil;
  10. }
 
 
C.其他用法
1.ASIFormDataRequest继承NSOperation,可以放到queue中管理
2.网络请求状态
3.显示网络请求状态(状态栏指示动画圈)
4.支持后台网络请求
5.设置请求超时重试次数
 
 
 
 
 
 
 
 
 
 

[iOS 多线程 & 网络 - 2.9] - ASI框架的更多相关文章

  1. [iOS 多线程 & 网络 - 2.10] - ASI框架下载文件

    A.ASI框架中的下载 1.实现步骤 在实际的开发中如果要使用asi框架来下载服务器上的文件,只需要执行下面简单的几个步骤即可. (1)创建请求对象:(2)设置下载文件保存的路径:(3)发送下载文件的 ...

  2. [iOS 多线程 & 网络 - 2.11] - ASI框架上传文件

    A.ASI的上传功能基本使用 1.实现步骤 (1)创建请求 使用ASIFormDataRequest (2)设置上传文件路径 (3)发送请求     2.上传相册相片 UIImagePickerCon ...

  3. iOS开发网络篇—使用ASI框架进行文件下载

    iOS开发网络篇—使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: #import "YYViewCo ...

  4. [iOS 多线程 & 网络 - 4.0] - AFN框架简单使用

    A.AFN基本知识 1.概念 AFNetworking 是对NSURLConnection的封装 运行效率没有ASI高(因为ASI基于CFNetwork),但是使用简单 AFN支持ARC     B. ...

  5. [iOS 多线程 & 网络 - 2.0] - 发送接收 服务器信息

    A.搭建java服务器 使用eclipse.tomcat和struts2框架搭建一个简单的服务器 1.准备好合适版本的JDK.eclipse EE.tomcat.struts2 框架包 2.配置JDK ...

  6. [iOS 多线程 & 网络 - 1.0] - 多线程概述

    A.进程 什么是进程进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过"活 ...

  7. AJ学IOS(55)多线程网络之图片下载框架之SDWebImage

    AJ分享,必须精品 效果: 代码: - (NSArray *)apps { if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsO ...

  8. [iOS 多线程 & 网络 - 2.8] - 检测网络状态

    A.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的:(1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能)(2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 ...

  9. [iOS 多线程 & 网络 - 2.3] - 解析xml

    A.XML基本知识 1.xml概念 什么是XML全称是Extensible Markup Language,译作“可扩展标记语言”跟JSON一样,也是常用的一种用于交互的数据格式一般也叫XML文档(X ...

随机推荐

  1. css实现缩进无限嵌套

    使用css实现缩进带背景无限嵌套,支持Ie6,代码如下: <!DOCTYPE html> <html lang="en"> <head> < ...

  2. 带你走进EJB--那些跟EJB容器相关的那些Java概念

    最近在对EJB的相关内容进行总结,在总结的过程中发现对容器的概念并不是很理解,因为EJB本身就是一个容器,但是容器到底是用来做什么的?它跟我们之前所了解的组件,框架,包,类等都有什么关系?接下来主要是 ...

  3. Azure SQL 数据库:服务级别与性能问答

    ShawnBice    2014 年 5 月 5 日上午 10:00 几天前,我发表了一篇文章,并就 4 月 24 日发布的适用于Windows Azure SQL 数据库的新服务级别提供了一些预料 ...

  4. 安装服务Memcached+Nginx+Php linux下安装

    Memcached安装 1.      源码安装libevent(下载地址:http://monkey.org/~provos/libevent/) 2.      源码安装memcached(下载地 ...

  5. Delphi or函数的用法

    function GetFlag(a: string): Integer;var I: Integer;begin Result := 0; for I := 0 to 3 - 1 do begin ...

  6. SQL知识累积

    详细介绍select的文章,展示原始数据.SQL.查询结果,以及在不同数据库下SQL应该如何写. https://en.wikipedia.org/wiki/Select_(SQL) 目录如下: Co ...

  7. ASIHTTPREQUEST 文档

    http://blog.csdn.net/ysysbaobei/article/details/17026577 Please note that I am no longer working on ...

  8. 用VBS脚本发邮件

    需求是这样的:针对账号的管理,如果发现该账号的管理员给账号加了批注,(比如要过期,修改密码,完善资料等),就需要找到这样的账号及其管理的邮件,然后发邮件给他们的管理员同时抄送给账号以达到提醒的目的.那 ...

  9. Cadence关闭StartPage的方法

    Cadence 16.5开始,打开原理图工具 Orcad Capture 时,总是会弹出startpage 页面,关闭它的方法: 解决方法如下: (1) View---Toolbar----Comma ...

  10. g++安装 Gnome/Gtk+开发库 的 环境安装(安装widgets的必要条件)

    sudo yum install gcc-c++ 我在更新软件源后,看了看最新版的GTK开发版是3.0的. 所以,基本可以照搬. sudo yum -t install gtk3 sudo yum - ...