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请求
 /** get请求 */
- (void)sendByGet{
// 创建请求
NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/login?user=tom&password=123"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; // 设置请求
request.timeOutSeconds = ; // 超时时间
request.delegate = self; // 使用selector处理请求返回数据
[request setDidStartSelector:@selector(startRequest)]; // 发送请求
[request startSynchronous]; // 同步请求
} /** 请求开始 */
- (void) startRequest
NSLog(@"请求开始")
}
 
(2)POST请求
使用ASIFormDataRequest
 - (void) sendByPost2 {
// 创建请求
NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/login"];
self.formRequest = [ASIFormDataRequest requestWithURL:url]; // 添加请求参数
[self.formRequest addPostValue:@"tom" forKey:@"user"];
[self.formRequest addPostValue:@"" forKey:@"password"]; self.formRequest.completionBlock = ^ {
NSLog(@"请求完毕");
}; // 发送请求
[self.formRequest startAsynchronous];
}
 
注意add和set的区别,一个是添加(适用于多值参数),一个是覆盖(内部先remove,再add)。
 
 
2.发送同步 & 异步请求
(1)发送同步请求
[request sendSynchronous];
(2)发送异步请求
[request sendAsynchronous];
 
     // 发送请求
[request startSynchronous]; // 同步请求
// [request startAsynchronous]; // 异步请求
 
 
3.处理返回信息
(1)request属性
  • request.error
  • request.responseStatusCode
  • request.responseStatusMessage
  • request.responseData
  • request.responseString
 
发送请求后:
     if (request.error) {
NSLog(@"请求出错");
}
 
 
(2)使用代理
遵守 <ASIHTTPRequestDelegate>
 
 /** get请求 */
- (void)sendByGet{
// 创建请求
NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/login?user=tom&password=123"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; // 设置请求
request.delegate = self;
// 发送请求
[request startAsynchronous]; // 异步请求
} #pragma mark - ASIHTTPRequestDelegate
/** 使用代理处理请求事件 */
- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data {
NSLog(@"正在接受数据");
}
 
(3)使用selector(基于代理方法,会覆盖代理方法)
====>此方法也要设置代理
 /** get请求 */
- (void)sendByGet{
// 创建请求
NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/login?user=tom&password=123"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; // 设置请求
request.delegate = self; // 使用selector处理请求事件
[request setDidStartSelector:@selector(startRequest)];
// 发送请求
[request startAsynchronous]; // 异步请求
} /** 请求开始 */
- (void) startRequest {
NSLog(@"请求开始");
}
 
(4)使用block
开启block:[request setStartedBlock:(void ^block)];
接收数据block:[request setDataReceive:(void ^block)];
结束block:[request setCompletionBlock:(void ^block)];
 /** get请求 */
- (void)sendByGet{
// 创建请求
NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/login?user=tom&password=123"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; // 设置请求
request.timeOutSeconds = ; // 超时时间
request.delegate = self; // 使用block处理请求事件
[request setCompletionBlock:^{
NSLog(@"请求完成!");
}]; // 发送请求
[request startAsynchronous]; // 异步请求
}
 
 
4.其实,需要把request作为成员变量,控制器被销毁,切记要先取消、清除request
====> 否则request的response返回的时候会发生野指针错误
 @interface ViewController () <ASIHTTPRequestDelegate>
@property(nonatomic, strong) ASIHTTPRequest *request;
@end #pragma mark - dealloc
/** 控制器销毁之前,一定要取消、清除成员request代理 */
- (void)dealloc {
[self.request clearDelegatesAndCancel];
self.request = nil;
}
 
 
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. Jqgrid入门-结合Struts2+json实现数据展示(五)

    DEMO用的是ssh框架实现的,具体怎么搭建的就不多做说明了.分页表格的数据操作难点就是数据展现.至于增删改直接用hibernate原生的方法实现即可.         初步分析:表格要实现分页,那么 ...

  2. Java Web编程的主要组件技术——Hibernate入门

    参考书籍:<J2EE开源编程精要15讲> Hibernate是对象/关系映射(ORM,Object/Relational Mapping)的解决方案,就是将Java对象与对象关系映射到关系 ...

  3. HDU 4635 Strongly connected (强连通分量)

    题意 给定一个N个点M条边的简单图,求最多能加几条边,使得这个图仍然不是一个强连通图. 思路 2013多校第四场1004题.和官方题解思路一样,就直接贴了~ 最终添加完边的图,肯定可以分成两个部X和Y ...

  4. cocos2d-x中的Jni使用(C++与Andriod方法互调)

    作者:何卫 转载请注明,原文链接:http://www.cnblogs.com/hewei2012/p/3376616.html 前提条件: 1.操作的游戏工程和cocos2d_x游戏引擎是一个目录的 ...

  5. linux - markdown编辑器

    1. linux可以用web-qq,http://web2.qq.com,[我们从未放弃成长,这句话挺感动我的.] (禽兽!你怎么在一开始就跑题!?) ————我只要“及时预览”———— 2. htt ...

  6. 省常中模拟 Test3 Day2

    matrix 找规律 题意:给定一个 N*N 的只有 0 和 1 的矩阵,有 Q 个操作,分三种:1. 将某行上的所有数字取反:2. 将某列上的所有数字取反:3. 输出 sum{ a[i][j]*a[ ...

  7. LeetCode: Sqrt

    Title: Implement int sqrt(int x). Compute and return the square root of x. 思路:这个平方根肯定是在[1,x]之间,所以在这个 ...

  8. NYOJ-779-兰州烧饼

    [题目链接:NYOJ-779] 兰州烧饼 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 烧饼有两面,要做好一个兰州烧饼,要两面都弄热.当然,一次只能弄一个的话,效率 ...

  9. 去除 waring Method 'CreateNew' hides virtual method of base type 'TCustomForm'

    最近整理前人的代码,有好多的hint和waring, 其中整理到Method 'CreateNew' hides virtual method of base type 'TCustomForm', ...

  10. [android]如何让TextView使用超链接

    找了很多网址,最后是这个有说到. 总的做法是: 1.(当然也可以从Res中获取.) tv.setText(Html.fromHtml("<a href=\"http://ww ...