AFNetworking详解--总有你不知道的知识点

收集众多资料,对af的一个深入了解。


一、AFNetworking作用(随便聊聊,毕竟是开篇嘛)

AFNetworking可以用于发送HTTP请求,接受HTTP响应,但是不会缓存服务器响应,不能执行HTML页面中的JAvascript代码,同时,AFNetworking还内置支持JSON,plist文件和XML文件解析,使用起来比较方便。

扩展: Session:就是指某个客户端在访问服务器起到停止访问这段时间间隔内被称为时域。

Cookie:由服务器发送给客户端,把Cookie的key:value值储存在本地文件夹下,当下次请求的时候能够直接发送Cookie获得权限验证。

二、AFNetworking怎么用?

1、提交GET请求和提交POST请求。

2、创建一个下载文件的任务。(NSURLSessionDownLoadTask)

3、创建一个上传文件的任务。(NSURLSessionloadTask)

4、处理JSON或者Plist响应。


三、AFNetworking的源码实现。

1、AFURLConnectionOperation ----AFNetworking最核心的类。

(1)NSURLConnection是被设计成异步发送的,调用了start方法后,NSURLConnection会新建一些线程用底层的CFScoket去发送和接收请求,在发送和接收的一些事件发生后通知原来线程的Runloop去回调事件。NSURLConnection发送有以下三种方式:在主线程调异步接口,在子线程调同步接口,在子线程调异步接口。而AFNetworking使用的是在子线程调异步接口。

2、setCompleteBlock  、锁、序列化、backgroundTask

setCompleteBlock:AFNetwoking重写NSOperation提供的setCompletionBlock,用于任务完成时回调传进来的block,并且实现消除循环引用。

锁:AFURLConnectionOperation  有一把递归锁,在所有会访问/修改成员变量的外接口都加了锁,因为这些对外的接口用户是可以在任意线程调用的,对于访问和修改成员变量的接口,必须用锁保证线程安全。

序列化:AFNetworking的多数类都支持序列化,实现的是NSSecureCoding的接口,用-decodeObjectOfClass:forKey:方法,指定Class保证序列化后的数据不被篡改,若不指定Class,decode出来的对象可能不是原来的对象,有潜在的风险。

backgroundTask:这里提供了setShouldExecuteAsBackgroundTaskWithExpirationHandler接口,决定APP进入后台后是否继续发送接收请求,并在后台执行时间超时后取消所有请求。在dealloc 里需要调用[application endBackgroundTask:],告诉系统这个后台任务已经完成,不然系统会一直让你的APP运行在后台,直到超时。

3、浅谈AFHTTPRequestOperation  和 AFHTTPRequsetOperationManager

AFHTTPRequestOperation  继承了AFURLConnectionOperation,实现的功能比较少,主要多了responseSerializer,暂停下载,断点续传,以及提供接口请求成功失败的回调接口。理解了AFURLConnectionOperation,就会觉得AFHTTPRequestOperation比较简单,所以具体的就不写了。

AFHTTPRequsetOperationManager封装了AFNetworking其他功能的各个模块,如AFHTTPRequestSerializer(请求序列化),AFHTTPResponseSerializer(响应序列化),AFSecurityPolicy(安全策略),AFNetworkReachabilityManager(可达性),封装了HTTP请求所有相关的代码。    并且将所有的请求添加到同一个NSOperationQueue请求队列里。并且封装HTTP请求的常见方式如get  post  put  patch等。


四、AFNetworking常见的简单的用法

//获得网络请求管理者

AFHTTPRequestOperationManager  *manager = [AFHTTPRequestOperationManager manager];

manager.responseSerializer = [AFJSONResponseSerializer serializer];

//发送网络请求

[manager GET:@"http://localhost/demo.json" parameters:nil  success:^(AFHTTPRequestOperation * operation,id responseObject)

{

}failure :^(AFHTTPRequestOperation * operation,NSError * error)

{

}

];


post请求XML  

AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];

//修改相应解析对象

manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

//发送网络请求

[manager POST:@"http//localhost/videos.xml" parameter:nil success:^(AFHTTPRequestOperation * operation,id responseObject)

{

}failure:^(AFHTTPRequestOperation * operation,NSErrpr * error)

{

}];

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值