解析AFNetWorking 网络框架(二)

原创 2013年12月04日 13:18:32

接着前面写。

本帖先讲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_t completionGroup;默认为空,一个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(3.0)源码分析(一)——基本框架

框架组成         AFNetWorking是著名的网络通信框架,今天,我们就一起分析一下该框架的组成。         将AF下载导入工程后,下面是其包结构:         除...
  • u013378438
  • u013378438
  • 2016年07月02日 18:09
  • 6830

AFNetworking框架IOS网络数据请求由浅入深的使用方法

原文:https://segmentfault.com/a/1190000005022705?utm_source=tuicool&utm_medium=referral 概述 我们今天是来深入...
  • cordova
  • cordova
  • 2016年06月08日 17:43
  • 4712

iOS开发——AFNetworking框架使用详解

AFNetworking is a delightful networking library for iOS and Mac OS X.It’s built on top of the Founda...
  • u012350430
  • u012350430
  • 2016年05月28日 21:45
  • 6406

解析AFNetWorking 网络框架(二)

转:http://blog.csdn.net/andy_jiangbin/article/details/17114989 接着前面写。 本帖先讲AFURLConnectionOperatio...
  • jackljf
  • jackljf
  • 2014年08月21日 21:07
  • 457

解析AFNetWorking   网络框架(一)

一直忙于工作,需要资料在网上找到就转发在博客里,今天自己也贡献一点微薄的力量,以备以后自己查阅或需要的人做个参考。  这个版本就是最近的,项目中用到从官网下载的。 先简单看一下AFNetworking...
  • andy_jiangbin
  • andy_jiangbin
  • 2013年12月03日 22:52
  • 1951

ios网络请求框架,基于AFNetworking封装,其中缓存模块依赖TMCache,JSON解析模块依赖MJExtension,使用更加简单方便

LazyNetForIOS 由于本人不太会写文章,有写得不好得地方请见谅 项目介绍 项目地址 LazyNetForIOS 介绍: 这是一个ios网络请求框架,...
  • jiangyufeng123
  • jiangyufeng123
  • 2017年01月21日 11:15
  • 524

ios网络层框架AFNetworking

  • 2014年04月01日 16:25
  • 263KB
  • 下载

对第三方框架AFNetworking网络请求的使用浅析

AFNetworking是对NSURLConnection网络组件进行了封装, iOS7之后,AFNetworking对NSURLSession网络组件进行封装 ,主要功能:NSURLConnecti...
  • q605950495
  • q605950495
  • 2015年04月01日 21:57
  • 947

ios的网络请求以及jsonModel 和 AFNetworking框架的使用概要

有关于ios中开开发数据对 获取以及网络方面的知识,我们知道一般都是有AFNetworking来发送请求。 这里面的类我们可以使用cocoaPod来进行获取, Afnetworking库:就是一个...
  • u012496940
  • u012496940
  • 2015年11月25日 09:57
  • 808

iOS网络通信AFNetworking框架

1.在学网络编程前,先掌握几个基本概念 1.1客户端(Client):移动应用(iOS、android等应用) 1.2服务器(Server):为客户端提供服务、提供数据、提供资源的机器 1.3请求(R...
  • cool1314520dog
  • cool1314520dog
  • 2015年12月25日 15:35
  • 362
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解析AFNetWorking 网络框架(二)
举报原因:
原因补充:

(最多只允许输入30个字)