[ 流行的网络框架 ] AFN & ASI

1、AFN & ASI(早已经停止更新,但现在许多公司也在使用。)

 

  AFNetWorking地址:https://github.com/AFNetworking/AFNetworking

 

  ASIHTTPRequest地址:https://github.com/paytronix/ASIHTTPRequest

 

2、AFN与ASI对比

-- AFN
1. 基于 NSURLConnection & NSURLSession 进行的封装
2. 使用简单
3. 提供了自动的序列化 & 反序列化支持!

AFN的优势:
URL直接传字符串
响应回来得到的数据可以半自动反序列化(json可以自动(afn默认json解析),xml需要手动)
代码回调在主线程,不需要关心线程间通讯
用字典传递参数(parameters),不用写在URL里(GET),或请求体里(POST)
根据api文档,修改GET请求和POST请求,不需要关注如何选择

1、断点续传:1. 获取网络文件信息、2. 检查本地文件信息、3. 根据偏移位置下载文件

  NSString *range = [NSString stringWithFormat:@"bytes=%llu-", self.currentLength];

  [request setValue:range forHTTPHeaderField:@"Range"];

2、多线程分析

3、分段保存(解决内存峰值突增):

  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继承自NSOperation,意味着
  • 可以将多个ASIHTTPRequest放到NSOperationQueue中,同时管理多个请求
  • 可以设置请求之间的依赖 
  • ASIFormDataRequest继承自ASIHTTPRequest

其他用法:

1、现在是否有网络请求在处理中

[ASIHTTPRequest isNetworkInUse];

 

2、当正在请求时,是否要在状态栏显示联网状态(转圈圈)

[ASIHTTPRequest setShouldUpdateNetworkActivityIndicator:YES];

 

3、当应用后台运行时,是否仍然继续处理网络请求

request.shouldContinueWhenAppEntersBackground = YES;

 

4、设置请求超时后重试的次数

request.numberOfTimesToRetryOnTimeout = 2// 重试2

原文地址:https://www.cnblogs.com/Trybst/p/4513453.html