标签:
1 简介
1.1 概念
AFNetworking网络框架并不是IOS自带的框架,而是第三方的开源框架。它是对NSURLConnection和NSURLSession API的封装,但是目前AFNetworking 3.0已经删除了基于 NSURLConnection API的所有支持,所以本文只记录基于NSURLSession API的相关接口。AFNetworking 框架是基于Object-C语言,若需要使用Swift语言版可以了解Alamofire框架。
个人感觉学习AFNetworking 框架非常麻烦,它没有提供guide,所以只能按着GitHub和头文件进行学习。
1.2 第一个程序
1.2.1 环境配置
环境配置非常简单,有多种方式,在GitHub提供了几种方法,这里使用最简单的方式:导入源码。
新建IOS项目后,导入在GitHub网站下载的AFNetworking 源码,如图 2所示。
?
?
图 2
1.2.2 源码
其使用如下所示,只需引入AFNetworking.h文件即可使用其API。
#include "AFNetworking.h" -(void)DownloadTask { NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; ? NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; ? NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]]; } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { NSLog(@"File downloaded to: %@", filePath); }]; [downloadTask resume]; } |
?
?
2 AFURLSessionManager
AFURLSessionManager是对NSURLSession的封装,其实现了NSURLSession的四个协议。所以提供的功能与NSURLSession一样,拥有三种任务类型:dataTask、uploadTask和downloadTask。
2.1 使用步骤
其实AFURLSessionManager对NSURLSession的封装,只封装了两个部分:
?
从而AFURLSessionManager与NSURLSession类似,如下是使用步骤:
?
如下是创建一个Data Task,只有AFURLSessionManager 是AFNetworking提供的类,其它都是IOS自带的类。
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; //步骤1 AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; //步骤2 ? //步骤3 NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { if (error) { NSLog(@"Error: %@", error); } else { NSLog(@"%@ %@", response, responseObject); } }]; [dataTask resume]; //步骤4 |
?
2.2 提供的功能
AFURLSessionManager提供的三种任务类型:dataTask、uploadTask和downloadTask,所以提供的功能都是围着这三种任务类型。
2.2.1 创建任务
可以调用AFURLSessionManager对象的相应方法来创建三种任务:
表 31 AFURLSessionManager对象创建任务方法
任务类型 | 创建方法 | 语义 |
NSURLSessionDataTask | dataTaskWithRequest:request:completionHandler: | 用NSURLRequest对象创建任务。 |
dataTaskWithRequest:request:uploadProgress:downloadProgress: | 用NSURLRequest对象创建任务。 | |
NSURLSessionUploadTask | uploadTaskWithRequest:request: fromFile: | 用NSURLRequest对象创建上传任务,上传的路径是NSURL所指的路径。 |
uploadTaskWithRequest:request: fromData: | 用NSURLRequest对象创建上传任务,上传的是HTTP体。 | |
uploadTaskWithStreamedRequest:request: | 用streaming NSURLRequest对象创建上传任务, | |
NSURLSessionDownloadTask | downloadTaskWithRequest:request: | 用NSURLRequest对象创建下载任务。 |
downloadTaskWithResumeData:resumeData | 用NSData对象创建下载任务。 |
?
2.2.2 获取任务对象
由于AFURLSessionManager对象可以创建三种类型的任务,并且当创建完成后其内部存在所有已经创建任务对象的引用,在AFURLSessionManager对象内部有四个任务集合:
?
2.2.3 监听任务状态
AFURLSessionManager对象可以对所创建的任务进行监听,当这些任务发生变化时,可以执行指定的block块,具体内容可以参考该类的.h文件。
如下是AFURLSessionManager对象的一个方法声明,其语义是指当data task任务收到data对象时,就执行block块:
- (void)setTaskDidCompleteBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSError * _Nullable error))block; |
?
3 AFHTTPSessionManager
AFHTTPSessionManager类是AFURLSessionManager类的子类,它只是提供的一些方便进行HTTP请求的方法。当然AFURLSessionManager类本身也可以进行HTTP请求,但需要配置NSURLRequest对象。
3.1 使用步骤
AFHTTPSessionManager使用起来比AFURLSessionManager更加简单,其使用步骤是:
?
如下是使用HTTP的GET方法:
-(void)HTTPSessionManager { AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init]; [manager GET:@"http://example.com/foo.json" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"success"); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"error"); }]; } |
?
3.2 提供的方法
AFHTTPSessionManager类提供的6种常用的HTTP方法:
表 32 AFHTTPSessionManager类提供的HTTP方法
HTTP方法 | 类方法 | 语义 |
GET | GET:URLStringparameters: success:failure: | 从服务器获取一份文档 |
GET:URLString:parameters: progress: success: failure: | ||
HEAD | HEAD:URLString:parameters:success:failure: | 只从服务器获取文档的首部 |
POST | POST:URLString:parameters:progress:success:failure: | 向服务器发送需要处理的数据 |
PUT | PUT:URLString:parameters:success:failure: | 将请求的主体部分存储在服务器上。 |
PATCH | PATCH:URLString:parameters:success:failure: | 对可能经过代理服务器传送到服务器上去的报文进行追踪。 |
DELETE | DELETE:URLString:parameters:success:failure: | 从服务器上删除一份文档。 |
?
4 参考文献
标签:
原文地址:http://www.cnblogs.com/hlwfirst/p/5496457.html