iOS ASI 笔记

来源:互联网 发布:安卓手机版mac修改大师 编辑:程序博客网 时间:2024/06/05 07:09

 //联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄


ASI “HTTP访问终结者201211月停止更新


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