转:http://blog.csdn.net/andy_jiangbin/article/details/17114989

接着前面写。

本帖先讲AFURLConnectionOperation,它是AFNetworking中是所有请求网络的基类。它是基于NSURLConnection实现的,所以在此类里实现了NSURLConnection的delegate 方法:

- `connection:didReceiveResponse:`

- `connection:didReceiveData:`

- `connectionDidFinishLoading:`

- `connection:didFailWithError:`

- `connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:`

- `connection:willCacheResponse:`

- `connectionShouldUseCredentialStorage:`

- `connection:needNewBodyStream:`

- `connection:willSendRequestForAuthenticationChallenge:`

AFURLConnectionOperation是继承于NSOperation,NSOPeration是为了运用于多线程类,只要将operation加入队列里,operation就会自动执行。另外AFURLConnectionOperation除了实现NSURLConnectionDelegate和NSURLConnectionDataDelegate外,还实现了NSCoding和NSCoding协议,这两个协议主要是将operation归档在硬盘disk,并且copy一份到内存。

下面是AFURLConnectionOperation的属性:

@property (nonatomic,strong)NSSet*runLoopModes;这个默认值是NSRunLoopCommonModes,

@property (readonly,nonatomic,
strong)NSURLRequest;这个就是网络request,用于网络连接。

@property (readonly,nonatomic,strong)NSURLResponse
*response;这个request请求网络服务器后最近的一次响应,里面包含statusCode错误码,还有该request的所有header信息。

@property (readonly,nonatomic,strong)NSError
*error;如果发生错误,包含了该request的错误信息。

@property (readonly,nonatomic,strong)NSData*responseData;就是request网络返回的数据,如果是二进制流可以从此属性读取。

@property (readonly,nonatomic,copy)NSString
*responseString;这个属性其实和responseData属性内的数据一样,只不过这个属性石返回的NSString类型,通常获取xml或json数据。

@property (readonly,nonatomic,assign)NSStringEncoding
responseStringEncoding;这个属性标识此属性responseString的编码类型,默认是NSUTF8StringEncoding,网络数据通常采用此编码格式。

@property (nonatomic,assign)BOOL
shouldUseCredentialStorage;这个属性目前没用过,应该标示是否允许信任连接存储证书(如果有误,请指正)

@property (nonatomic,strong)NSURLCredential
*credential;一会查阅再写。

@property (nonatomic,strong)AFSecurityPolicy
*securityPolicy;安全策略。

@property (nonatomic,strong)NSInputStream
*inputStream;向网络发送的流

@property (nonatomic,strong)NSOutputStream
*outputStream;是请求返回的所有数据流保存到缓冲中,这个缓冲就是responseData属性内的数据,如果设置此属性,那么缓冲就不会存储到responseData里,值为nil。

@property (nonatomic,strong)dispatch_queue_t
completionQueue;默认为空,主队列被调用,主要用于CompletionBlock。

@property (nonatomic,strong)dispatch_group_tcompletionGroup;默认为空,一个private
dispatch group被使用,主要用于CompletionBlock。

@property (nonatomic,strong)NSDictionary
*userInfo;可以保存一些用户信息,与每个request唯一对应。

总结:这些属性里使用最频繁的就是request,response,responseData,responseString,userInfo,error。

下面是AFURLConnectionOperation的一些方法:

- (instancetype)initWithRequest:(NSURLRequest *)urlRequest;

参数为一个urlRequest返回一个AFURLConnectionOperation的实例,instancetype类似于id,ios7以后apple换成这。

- (void)pause;暂停一个正在准备ready,executing,finished的operation,保留在队列里直到被取消或者重启resume,暂停一个已完成的或者取消的,已暂停的operation不会有任何作用。

- (BOOL)isPaused;这个不用解释返回yes或no。

- (void)resume;这个restart一个paused的operation。从队列里移除。

- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(void (^)(void))handler;app切换到后台还会执行。(这个目前还没用过)

- (void)setUploadProgressBlock:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block;

向服务器上传二进制数据流的回调block。

- (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block;

从服务器下载二进制数据流的回调block。

- (void)setWillSendRequestForAuthenticationChallengeBlock:(void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block;

这个没用过,然后补充,可能是鉴权之类的把。

- (void)setRedirectResponseBlock:(NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block;

这个应该是重定向时执行。

- (void)setCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block;

从缓冲获取response调用。

+ (NSArray *)batchOfRequestOperations:(NSArray *)operations

progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock

completionBlock:(void (^)(NSArray *operations))completionBlock;

这个没用过,然后补充。

下面是一些extern的变量:

extern NSString * const AFNetworkingErrorDomain;

extern NSString * const AFNetworkingOperationFailingURLRequestErrorKey;

extern NSString * const AFNetworkingOperationFailingURLResponseErrorKey;

///--------------------

/// @name Notifications

///--------------------

/**

Posted when an operation begins executing.

*/

extern NSString * const AFNetworkingOperationDidStartNotification;

/**

Posted when an operation finishes.

*/

extern NSString * const AFNetworkingOperationDidFinishNotification;

解析AFNetWorking 网络框架(二)的更多相关文章

  1. 解析AFNetWorking 网络框架(一)

    转:http://blog.csdn.net/andy_jiangbin/article/details/17103041 一直忙于工作,需要资料在网上找到就转发在博客里,今天自己也贡献一点微薄的力量 ...

  2. Python全栈开发:django网络框架(二)

    Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...

  3. 上门洗车APP --- Androidclient开发 之 网络框架封装介绍(二)

    上门洗车APP --- Androidclient开发 之 网络框架封装介绍(二) 前几篇博文中给大家介绍了一下APP中的基本业务及开发本项目使用的网络架构: 上门洗车APP --- Androidc ...

  4. GJM : Unity3D 常用网络框架与实战解析 【笔记】

    Unity常用网络框架与实战解析 1.Http协议          Http协议                  存在TCP 之上 有时候 TLS\SSL 之上 默认端口80 https 默认端口 ...

  5. Google官方网络框架-Volley的使用解析Json以及加载网络图片方法

    Google官方网络框架-Volley的使用解析Json以及加载网络图片方法 Volley是什么? Google I/O 大会上,Google 推出 Volley的一个网络框架 Volley适合什么场 ...

  6. Android笔记(六十二)网络框架volley

    什么是Volley 很多时候,我们的APP都需要用到网络技术,使用HTTP协议来发送接收数据,谷歌推出了一个网络框架——volley,该框架适合进行数据量不大,但通信频繁的网络操作. 它的优点: (1 ...

  7. iOS开发之AFNetworking网络编程

    众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来很不方便.不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各 ...

  8. 事件驱动之Twsited异步网络框架

    在这之前先了解下什么是事件驱动编程 传统的编程是如下线性模式的: 开始--->代码块A--->代码块B--->代码块C--->代码块D--->......--->结 ...

  9. iOS - AFNetworking 网络请求

    前言 在 iOS 开发中,一般情况下,简单的向某个 Web 站点简单的页面提交请求并获取服务器的响应,用 Xcode 自带的 NSURLConnection 是能胜任的.但是,在绝大部分下我们所需要访 ...

随机推荐

  1. 关于linux下rar文件的解压缩操作

    在linux系统下.本身没有对rar文件操作的命令,如果需要对rar格式的文件操作,我们需要安装第三方的软件rar以及unrar. 1.linux下rar管理软件下载的官方地址为:http://www ...

  2. BestCoder 1st Anniversary($) 1003 Sequence

    题目传送门 /* 官方题解: 这个题看上去是一个贪心, 但是这个贪心显然是错的. 事实上这道题目很简单, 先判断1个是否可以, 然后判断2个是否可以. 之后找到最小的k(k>2), 使得(m-k ...

  3. intent传递参数

    来建第一个Activity:MyIntent  [mw_shl_code=java,true]public class MyIntent extends Activity {              ...

  4. C逻辑型变量——时控灯例子

    在C99标准颁布之前,我们通常都是用1或者0来表示逻辑的真与假,因此,当我们需要在程序中传递这种逻辑数据时,我们都是用整型数据类型int来表示这种逻辑型数据.然而,使用整型数据类型int来表示逻辑型变 ...

  5. IOS 视频分解图片、图片合成视频

    在IOS视频处理中,视频分解图片和图片合成视频是IOS视频处理中经常遇到的问题,这篇博客就这两个部分对IOS视频图像的相互转换做一下分析. (1)视频分解图片 这里视频分解图片使用的是AVAssetI ...

  6. Hibernate笔记——C3P0配置

    Hibernate作为持久层(ORM)框架,操作数据库,自然也就离不开数据库连接池了.其支持多种连接池,这里就用最熟悉的C3P0连接池. C3P0连接池前面已经介绍了并使用很多次了就不再详细说明了. ...

  7. HTML5的fieldset标签

    定义和用法 fieldset 元素可将表单内的相关元素分组,绘制一个带标题的框,有如winform开发中的panel. <fieldset> 标签将表单内容的一部分打包,生成一组相关表单的 ...

  8. MSChart 控件

    微软发布了.NET 3.5框架下的图表控件,功能很强劲,基本上能想到的图表都可以使用它绘制出来,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式,不过缺点也比较明显 ...

  9. Android百度地图开发05之公交信息检索 + 路线规划

    在上一篇blog中介绍过POI检索的使用,本篇blog主要介绍公交信息检索和线路规划的内容. 公交信息检索 实际上,公交信息检索与POI检索.在线建议检索非常相似,也是把你需要检索的信息发送给百度地图 ...

  10. java Comparable和Comaprator的对比

    Comparable使一个class具备不同实例间进行比较的行为.这些对象的集合,可作为Collections.sort或Arrays.sort的参数 Comparator可以看成一种算法的实现,将算 ...