天天看点

iOS ASI 笔记

 //联系人:石虎  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语言的代码,看看头文件,知道接口,能够画出大概的功能接口线路图就行了!