AFN监听网络状态
ASI
》ASIHTTPRequest,外号http终结者
》基于底层CFNetwork框架,效率高
》停止更新,潜在bug无人解决
》很多公司旧项目在用,
》老程序员必备
》基本使用
1 设置非arc环境 -fno-objc-arc
2 添加dylib动态库
3 创建请求对象
4 开始同步请求
5 判断是否请求成功
NSString *error = [request error]
6 获取服务器响应数据
[request responseData]
[request responseString]
7 设置代理,实现代理方法监控请求过程
注意:实现了didReceiveData代理方法responseData\responseString属性将被忽略,不能通过这两个属性获取数据
》其它用法
1 创建请求
2 开始异步请求
[request startAsynchronous]
3 实现block,通过block代码控制请求
注意:1. ASI同时设置block和实现代理方法,block和代理都会调用,先调用代理方法再调用block。
2. ASI还可以自己定义请求过程各阶段的监听方法
通过响应码判断是否请求成功
》ASI发送POST请求 ASIFormDataRequest
1 创建请求,使用ASIFormDataRequest实例即表示post请求
2 设置参数setPostValue设置单值参数,addPostValue设置多值参数
3 开始请求
4 设置监听
》ASI文件下载(GET)
1 创建请求对象
2 设置文件存位置
3 开始请求
4 设置代理监听下载过程
5 实现代理方法
6 直接让progressView成为reqeust的代理,显示下载进度
7 设置断点续传,
7-1 设置支持断点
7-2 设置临时路径
》ASI文件上传
1 创建post请求对象
2 设置参数
2-1 设置文本参数
2-2 设置文件参数
2-3 设置监听上传进度
3 开始异步请求
4 设置监听
问题:在非ARC环境中,控制器销毁了,请求对象还在继续,当请求返回调用控制器的代理方法时,将出现野指针错误
解决:控制器销毁时将请求对象也销毁
》判断是否有网络请求
[ASIHTTPRequest isNetworkInUse]
》状态栏是否显示联网状态(菊花圈)
[ASIHTTPRequest setShouldUpdateNetworkActivityIndicator:YES]
》后台运行
request.shouldContinueWhenAppEnterBackgroud;
》请求超时重试次数
request.numberOfTimesToRetryOnTimeout = 3;
面试题:
》ASI和AFN的区别
1 底层实现
1-1 AFN基于OC的NSURLConnection和NSURLSession、
1-2 ASI基于C语言的CFNetwok
2 服务器返回数据
2-1 ASI没有直接提供对服务器数据处理方式
2-2 AFN提供了
3 监听请求过程
3-1 AFN提供success和failure两个block
3-2 ASI提高三种监听方案,能够监听开始、响应信息、响应数据、结束、失败等完整过程
3-2-1 不遵守协议的代理
3-2-2 遵守协议的代理
3-2-3 block
4 文件上传下载使用难度不同
4-1 AFN各种不易实现
4-1-1
4-2 ASI
4-2-1 容易监听上传下载进度
4-2-2 容易实现断点续传
4-2-3
5 ASI提供更多使用功能
5-1 显示状态栏图标
5-2 设置后台运行
5-3 设置请求依赖,NSOperation
5-4 统一管理所有请求,ASINetWorkQueue
5-5
》ASI底层怎么实现
UIWebView
》基本使用
1 获取NSURL
2 获取NSURLRequest请求
3 调用webView的loadRequest设置请求内容
4 设置网页伸缩