//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄
ASI -“HTTP访问终结者”2012年11月停止更新
与 AFN的对比
-AFN
1.基于 NSURLConnection & NSURLSession进行的封装
2.使用简单
3.提供了自动的序列化 &反序列化支持!
-ASI
1.基于 CFNetwork进行的封装 Core Foundation,是底层的 C语言的框架,ASI的效率是跟好的
2.使用非常灵活,给程序员提供了各种使用的可能和空间!
* 用代理
*用块代码
*自定义监听方法
*自定义代理->开发者可以定制专属自己的网络管理工具!
提示:真正开发中,只要选择一个我们比较能够掌握的就可以了!
3.使用难度大
4. MRC的,需要考虑到 ARC & MRC混编的问题
5.返回内容只是提供了二进制数据,或者字符串(前提结果确实是字符串!)
ASI的序列化和反序列化需要程序员自己来!
-其他
是否会使用 ASI,说明你是否是一个资深的 iOS 程序员
目前仍然后很多大的项目,在使用 ASI,原因:
1>大的项目开发时间比较长,不好更换
2>大的项目对网络请求的复杂度要求比较高!AFN无法胜任!
阅读官方示例程序笔记
#import "ASIHTTPRequest.h"
1. url
NSURL *url = [NSURL URLWithString:[urlField text]];
2. request
[self setRequest:[ASIHTTPRequest requestWithURL:url]];
3.发起同步请求
[request startSynchronous];
// 异步请求
[request startAsynchronous];
4.能够获得数据了!
获得一个信息:ASI中,绝大多数的功能都封装在 ASI的请求中!
ASI block使用的细节:
*** 如果同时设置了代理和块代码,两个方法都会被执行,而且先执行代理的方法,后执行block的方法!
*** 在使用 block时,如果设计到引用 request,需要注意不要出现循环引用!
__weak typeof(request) weakRequest = request;
[request setCompletionBlock:^{
NSLog(@"block - %@", weakRequest.responseString);
}];
block 是 iOS4.0之后,苹果推出的,ASI默认的设备版本是3.1.3,支持2.0。
ASI最开始是没有block的,在1.8版本之后,才增加了block的功能!
面试题:在使用block的时候,什么时候会出现循环引用,如何解决?
在使用 ASI的时候,如果没有特殊情况,使用代理会更安全!
*** ASI 使用的一个很重要的注意事项
视图控制器销毁之前,需要清理 request的代理并且取消请求,否则会造成野指针访问
// 取消下载任务
[self.request clearDelegatesAndCancel];
关于第三方框架源代码的阅读:
1. OC的代码可以使劲看
2. C语言的代码,看看头文件,知道接口,能够画出大概的功能接口线路图就行了!