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. 三个Timer

    System.Windows.Forms.Timer System.Timers.Timer System.Threading.Timer 关于这三者的区别,可以参见msdn     https:// ...

  2. Codeforces Round #207 (Div. 2)C

    读错题意了..线段树延迟标记 白刷这么多线段树 #include <iostream> #include<cstdio> #include<cstring> #in ...

  3. UVa 11361 (计数 递推) Investigating Div-Sum Property

    题意: 统计[a, b]中有多少个数字满足:自身是k的倍数,而且各个数字之和也是k的倍数. 分析: 详细分析见<训练之南>吧,=_=|| 书上提出了一个模板的概念,有了模板我们就可以分块计 ...

  4. VS2010解决方案不显示无法添加项目问题

    问题:在VS2010中不显示解决方案,导致不能添加项目. 方法:工具-选项-项目和解决方案-选中“总是显示解决方案”,ok

  5. 8 种 NoSQL 数据库系统对比

    导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型NoSQL数据库的文章. 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只 ...

  6. UVA 4080 Warfare And Logistics 战争与物流 (最短路树,变形)

    题意: 给一个无向图,n个点,m条边,可不连通,可重边,可多余边.两个问题,第一问:求任意点对之间最短距离之和.第二问:必须删除一条边,再求第一问,使得结果变得更大. 思路: 其实都是在求最短路的过程 ...

  7. $('div','li')

    要搞清楚$('div','li') 和 $('div , li') 和 $('div  li') 区别$('div','li')是$(子,父),是从父节点里找子,而不是找li外面的div $('div ...

  8. Oracle中如何判断一个字符串是否含有汉字

    看到网友问,怎么查询表中某个字段数据是不是包含了全角字符啊? 这个问题涉及到几个函数:to_single_byte.length和lengthb,我之前做开发的时候研究的是如何判断一个字符串中是否包含 ...

  9. ASP.NET 经典60道面试题

    转:http://bbs.chinaunix.net/thread-4065577-1-1.html ASP.NET 经典60道面试题 1. 简述 private. protected. public ...

  10. Mem Cgroup目录无法清理问题分析

    http://blogs.360.cn/360xitong/2013/05/02/mem-cgroup%E7%9B%AE%E5%BD%95%E6%97%A0%E6%B3%95%E6%B8%85%E7% ...