ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> IOS开发 >> 总结-AFNetworking学习笔记

总结-AFNetworking学习笔记

来源:网络整理     时间:2015-03-11     关键词:

本篇文章主要介绍了"总结-AFNetworking学习笔记",对于IOS开发感兴趣的同学可以参考一下: 1 类库功能简介1.1 AFNetworking的大体思路1.1.1 NSURLConnection NSOperation daozheNSURLC...

1    类库功能简介

1.1  AFNetworking的大体思路

1.1.1 NSURLConnection + NSOperation daozhe

NSURLConnection  Foundation URL加载系统的基石。一个 NSURLConnection 异步地加载一个 NSURLRequest 对象,调用 delegate  NSURLResponse / NSHTTPURLResponse 方法,其 NSData 被发送到服务器或从服务器读取;delegate还可用来处理 NSURLAuthenticationChallenge、重定向响应、或是决定 NSCachedURLResponse 如何存储在共享的 NSURLCache上。

NSOperation 是抽象类,模拟单个计算单元,有状态、优先级、依赖等功能,可以取消。

AFNetworking的第一个重大突破就是将两者结合。AFURLConnectionOperation 作为 NSOperation 的子类,遵循NSURLConnectionDelegate 的方法,可以从头到尾监视请求的状态,并储存请求、响应、响应数据等中间状态。

1.1.2 Blocks

iOS 4 引入的 block GrandCentral Dispatch从根本上改善了应用程序的开发过程。相比于在应用中用 delegate乱七八糟地实现逻辑,开发者们可以用block将相关的功能放在一起。GCD能够轻易来回调度工作,不用面对乱七八糟的线程、调用和操作队列。

更重要的是,对于每个request operation,可以通过 block自定义 NSURLConnectionDelegate 的方法(比如,通过setWillSendRequestForAuthenticationChallengeBlock: 可以覆盖默认的connection:willSendRequestForAuthenticationChallenge: 方法)。

现在,我们可以创建 AFURLConnectionOperation 并把它安排进 NSOperationQueue,通过设置 NSOperation 的新属性completionBlock,指定操作完成时如何处理responseresponse data(或是请求过程中遇到的错误)。

1.1.3 序列化 &验证

更深入一些,requestoperation操作也可以负责验证HTTP状态码和服务器响应的内容类型,比如,对于application/json MIME类型的响应,可以将 NSData序列化为JSON 对象。

从服务器加载 JSONXMLproperty list或者图像可以抽象并类比成潜在的文件加载操作,这样开发者可以将这个过程想象成一个promise而不是异步网络连接。

1.2     AFN 1.0版本

1.2.1  AFN1.0架构设计原理

AFN 的基础部分是 AFURLConnectionOperation,一个 NSOperation subclass,实现了 基于NSURLConnection 相关的delegate+blocks,网络部分是由 NSURLConnection 完成,然后利用 NSOperation 的 state (isReady→isExecuting→isFinished) 变化来进行网络控制。网络请求是在一个指定的线程(networkRequestThread)完成。

AFURLConnectionOperation是一个很纯粹的网络请求 operation,可以对他进行 start/cancel/pause/resume 操作,可以获取对应的 NSURLRequest 和 NSURLResponse 数据。支持 NSInputStream/NSOutputStream,提供了 uploadPress 和downloadProgress 以方便其他使用。

AFHTTPRequestOperation是 AFURLConnectionOperation 的子类,针对 HTTP+HTTPS 协议做了一层封装,比如statusCode、Content-Type 等,添加了请求成功和失败的回调 block,提供了addAcceptableContentTypes: 以方便上层使用。

1.2.2  各个类功能说明

AFURLConnectionOperation和它的子类继承NSOperation的,允许请求被取消,暂停/恢复和由NSOperationQueue进行管理。

AFURLConnectionOperation也可以让你轻松得完成上传和下载,处理验证,监控上传和下载进度,控制的缓存。

AFHTTPRequestOperation和它得子类可以基于http状态和 内容列下来区分是否成功请求了。

AFNetworking可以将远程媒体数据类型(NSData)转化为可用的格式,比如如JSON,XML,图像和plist。

AFHTTPClient提供了一个方便的网络交互接口,包括默认头,身份验证,是否连接到网络,批量处理操作,查询字符串参数序列化,已经多种表单请求的UIImageView+ AFNetworking增加了一个方便的方法来异步加载图像。

1.3     AFN 2.0版本

1.3.1 动机

·      兼容NSURLSession NSURLSession  iOS 7 新引入的用于替代 NSURLConnection 的类。NSURLConnection 并没有被弃用,今后一段时间应该也不会,但是 NSURLSession  Foundation中网络的未来,并且是一个美好的未来,因为它改进了之前的很多缺点。(参考WWDC 2013 Session 705 “What’s New in Foundation Networking”,一个很好的概述)。起初有人推测,NSURLSession 的出现将使AFNetworking不再有用。但实际上,虽然它们有一些重叠,AFNetworking还是可以提供更高层次的抽象。AFNetworking2.0不仅做到了这一点,还借助并扩展 NSURLSession来铺平道路上的坑洼,并最大程度扩展了它的实用性。

·      模块化 -对于AFNetworking的主要批评之一是笨重。虽然它的构架使在类的层面上是模块化的,但它的包装并不允许选择独立的一些功能。随着时间的推移,AFHTTPClient 尤其变得不堪重负(其任务包括创建请求、序列化query string 参数、确定响应解析行为、生成和管理operation、监视网络可达性)。 AFNetworking 2.0 中,你可以挑选并通过 CocoaPods subspecs 选择你所需要的组件。

1.3.2 主要组件

1.3.2.1NSURLConnection 组件 (iOS 6 & 7)

  • AFURLConnectionOperation - NSOperation 的子类,负责管理 NSURLConnection&

    以上就介绍了总结-AFNetworking学习笔记,包括了方面的内容,希望对IOS开发有兴趣的朋友有所帮助。

    本文网址链接:http://www.codes51.com/article/detail_117768.html

相关图片

相关文章