一、AFN & ASI(早已经中止更新,但如今许多公司也在使用。)git
AFNetWorking地址:https://github.com/AFNetworking/AFNetworking程序员
ASIHTTPRequest地址:https://github.com/paytronix/ASIHTTPRequestgithub
二、AFN与ASI对比json
-- AFN
1. 基于 NSURLConnection & NSURLSession 进行的封装
2. 使用简单
3. 提供了自动的序列化 & 反序列化支持!api
AFN的优点:
URL直接传字符串
响应回来获得的数据能够半自动反序列化(json能够自动(afn默认json解析),xml须要手动)
代码回调在主线程,不须要关心线程间通信
用字典传递参数(parameters),不用写在URL里(GET),或请求体里(POST)
根据api文档,修改GET请求和POST请求,不须要关注如何选择缓存
一、断点续传:1. 获取网络文件信息、2. 检查本地文件信息、3. 根据偏移位置下载文件网络
NSString *range = [NSString stringWithFormat:@"bytes=%llu-", self.currentLength];多线程
[request setValue:range forHTTPHeaderField:@"Range"];框架
二、多线程分析异步
三、分段保存(解决内存峰值突增):
NSFileManager:作文件的复制,删除,检查是否存在,建立目录,删除目录,遍历目录...相似于在Finder中的操做
NSFileHandle:针对一个文件作二进制数据的读写操做
技巧:能够利用 MD5 检测文件下载是否正确 !
以文件流的方式写入数据:NSStream也是Socket开发中很是重要的一个环节
技巧:建立一个单例,统一管理全局全部的网络会话
-- ASI
1. 基于 CFNetwork 进行的封装 Core Foundation,是底层的 C 语言的框架,ASI 的效率是跟好的
2. 使用很是灵活,给程序员提供了各类使用的可能和空间!
* 用代理
* 用块代码
* 自定义监听方法
* 自定义代理-> 开发者能够定制专属本身的网络管理工具!
3. 使用难度大
4. MRC的,须要考虑到 ARC & MRC 混编的问题--下边有详解
5. 返回内容只是提供了二进制数据,或者字符串(前提结果确实是字符串!)
ASI的 序列化 和 反序列化 须要程序员本身来!
// ASI经过代理的方式处理异步请求,请求成功、失败都会通知代理
// 代理须要遵照ASIHTTPRequestDelegate协议
PS:经过block回调传值、发送POST请求、文件上传&下载、ASI数据缓存、缓存某个请求 等。
其余用法:
一、如今是否有网络请求在处理中
[ASIHTTPRequest isNetworkInUse];
二、当正在请求时,是否要在状态栏显示联网状态(转圈圈)
[ASIHTTPRequest setShouldUpdateNetworkActivityIndicator:YES];
三、当应用后台运行时,是否仍然继续处理网络请求
request.shouldContinueWhenAppEntersBackground = YES;
四、设置请求超时后重试的次数
request.numberOfTimesToRetryOnTimeout = 2; // 重试2次