AFN的六大模块


  • NSURLConnection,主要对NSURLConnection进行了进一步的封装,包含以下核心的类:

    • AFURLConnectionOperation
    • AFHTTPRequestOperationManager
    • AFHTTPRequestOperation
  • NSURLSession,主要对象NSURLSession对象进行了进一步的封装,包含以下核心的类:
    • AFURLSessionManager
    • AFHTTPSessionManager
  • Reachability,提供了与网络状态相关的操作接口,包含以下核心的类:
    • AFNetworkReachabilityManager
  • Security,提供了与安全性相关的操作接口,包含以下核心的类:
    • AFSecurityPolicy
  • Serialization,提供了与解析数据相关的操作接口,包含以下核心的类:
    • AFURLRequestSerialization
    • AFURLResponseSerialization
  • UIKit,提供了大量网络请求过程中与UI界面显示相关的操作接口,通常用于网络请求过程中提示,使用户交互更加友好,包含以下核心的分类/类:
    • AFNetworkActivityIndicatorManager
    • UIActivityIndicatorView+AFNetworking
    • UIAlertView+AFNetworking
    • UIButton+AFNetworking
    • UIImageView+AFNetworking
    • UIKit+AFNetworking
    • UIProgressView+AFNetworking
    • UIRefreshControl+AFNetworking
    • UIWebView+AFNetworking

AFURLSessionManager


  • 创建任务的方法

    • 普通任务

      - (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
      /**
      * request:请求对象
      * completionHandler:请求完成调用的Block
      * response:服务器的响应信息
      * responseObject:服务器返回的数据
      * error:错误信息
      */
    • 上传任务(分别上传不同类型的文件)

      // 1. 上传文件类型的数据
      - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
      /**
      * fileURL:所要上传文件的路径
      */ // 2. 上传NSData类型的数据
      - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
      /**
      * bodyData:所要上传的文件数据
      */ // 3. 上传流数据
      - (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
      /**
      * request:通过流数据初始化的请求对象
      */
    • 下载任务

      // 1. 普通下载任务
      - (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request progress:(NSProgress * __autoreleasing *)progress destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler
      /**
      * progress:管理下载进度
      * destination:保存数据调用的Block
      * targetPath:数据的保存路径
      * 服务器的响应信息
      */ // 2. 支持断点下载的下载任务
      - (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData progress:(NSProgress * __autoreleasing *)progress destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler
      /**
      * progress:管理下载进度
      * resumeData:断点下载时的断点信息
      */

AFHTTPSessionManager


  • 常用的属性

    • baseURL(NSURL *),用于监视网络可达性与创建请求对象
    • requestSerializer(AFHTTPRequestSerializer *),指定指定GET、HEAD与DELETE请求参数的解析格式
    • responseSerializer(AFHTTPResponseSerializer *),用于指定服务器返回数据的格式
  • 常用方法
    • 初始化

      // 1. 通过工厂方法创建AFHTTPSessionManager对象
      + (instancetype)manager
      // 2. 通过构造方法创建AFHTTPSessionManager对象
      - (instancetype)initWithBaseURL:(NSURL *)url
      /**
      * 根据url初始化AFHTTPSessionManager对象
      */
      - (instancetype)initWithBaseURL:(NSURL *)url sessionConfiguration:(NSURLSessionConfiguration *)configuration
      /**
      * 根据url与configuration初始化AFHTTPSessionManager对象
      */
    • 请求数据

      // 1. GET请求
      - (NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
      /**
      * URLString:请求路径
      * parameters:请求参数
      * success:请求成功时调用的Block
      * responseObject:服务器返回的数据
      * failure:请求失败时调用的Block
      * error:错误信息
      */
      // 2. POST请求
      - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
      /**
      * 参数含义与GET请求相同
      */
      - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
      /**
      * block:用于创建多个数据来源
      */

使用AFN请求网络数据


  • 请求数据(XML/JSON)

    • 创建AFHTTPSessionManager对象

      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    • 指定对服务器的返回数据格式

      //以XML文档的形式返回数据
      manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
      //以JSON形式返回数据
      manager.responseSerializer = [AFJSONResponseSerializer serializer];
    • 设置请求体(类型为XML或JSON)

      // 请求体通常由服务器指定格式
      NSDictionary *params = @{
      @"username" : @"账号",
      @"pwd" : @"密码",
      @"type" : @"XML/JSON"
      };
    • 发送请求

      [manager GET:@"请求路径" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
      //responseObject:服务器返回的数据
      NSLog(@"请求成功");
      } failure:^(NSURLSessionDataTask *task, NSError *error) {
      //error:错误信息
      NSLog(@"请求失败");
      }];
  • 上传数据
    • 创建AFHTTPSessionManager对象

      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    • 创建上传任务

      /**基于NSURLConnection*/
      [manager POST:@"请求路径" parameters:@{@"用户名" : @"密码" constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
      //设置需要上传的文件
      NSData *data = [NSData dataWithContentsOfFile:@"所要长传文件的路径"];
      [formData appendPartWithFileData:data name:@"file" fileName:@"test.png" mimeType:@"image/png"];
      } success:^(NSURLSessionDataTask *task, id responseObject) {
      //上传成功
      } failure:^(NSURLSessionDataTask *task, NSError *error) {
      //上传失败
      }]; /**基于NSURLSession*/
      [manager uploadTaskWithRequest:request fromData:data progress:progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
      //上传数据成功
      }];
  • 下载数据
    • 创建AFHTTPSessionManager对象

      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    • 创建下载任务

      /**基于NSURLSession*/
      [manager downloadTaskWithRequest:request progress:progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
      // 存储下载数据是调用的Block
      } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
      //下载完成时调用的Block
      }]

iOS网络-05-AFNetwoking原理及常用操作的更多相关文章

  1. 01.AFNetworking原理及常用操作

    AFN的六大模块 NSURLConnection,主要对NSURLConnection进行了进一步的封装,包含以下核心的类: AFURLConnectionOperation AFHTTPReques ...

  2. OC - 17.AFNetworking原理及常用操作

    AFN的六大模块 NSURLConnection,主要对NSURLConnection进行了进一步的封装,包含以下核心的类: AFURLConnectionOperation AFHTTPReques ...

  3. 05.virsh命令的常用操作(kvm)

    注:以下命令均可在virsh的man手册页中找到   KVM虚拟机管理常用命令(domain):   virsh命令参数 功能 用法举例 list 查看已经存在的domain信息(可以带参数) vir ...

  4. MongoDB副本集的常用操作及原理

    本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...

  5. MongoDB 副本集的常用操作及原理

    本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...

  6. Stream常用操作以及原理探索

    Stream常用操作以及原理 Stream是什么? Stream是一个高级迭代器,它不是数据结构,不能存储数据.它可以用来实现内部迭代,内部迭代相比平常的外部迭代,它可以实现并行求值(高效,外部迭代要 ...

  7. iOS开发:UINavigationController常用操作

    NavigationController常用操作: 更改bar的背景颜色:self.navigationController?.navigationBar.barTintColor =UIColor. ...

  8. 【如何快速的开发一个完整的iOS直播app】(原理篇)

    原文转自:袁峥Seemygo    感谢分享.自我学习 目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的 ...

  9. iOS:app直播---原理篇

    [如何快速的开发一个完整的iOS直播app](原理篇) 转载自简书@袁峥Seemygo:http://www.jianshu.com/p/7b2f1df74420   一.个人见解(直播难与易) 直播 ...

随机推荐

  1. Java 集合系列09之 Map架构

    概要 前面,我们已经系统的对List进行了学习.接下来,我们先学习Map,然后再学习Set:因为Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过 ...

  2. Java对象的复制

      Java中对象的赋值分为浅拷贝和深拷贝 1.对象浅拷贝 public class CloneTest{ static class Emp{ String name; int age; Date h ...

  3. elasticsearch配置

    配置文件详解1.0版 配置文件位于es根目录的config目录下面,有elasticsearch.yml和logging.yml两个配置,主配置文件是elasticsearch.yml,日志配置文件是 ...

  4. 统一者管理员指南(Unifier Administration Guide)中文

    统一者管理员指南 Unifier Administration Guide 2014年6月 发布 2014年11月翻译 10.0版本 10.0.1译 关于译者 翻译者QQ:77811970 Email ...

  5. 如何快速开发树形列表和分页查询整合的WInform程序界面

    我在做Winform界面的时候,一般都是统一化处理,界面顶部放置一些字段条件供查询,下面就是分页查询列表,展示相关的数据.但有时候碰到一些表字段内容分类比较多,有一些特别重要,如果放在一个树形列表来进 ...

  6. ASP.NET后台执行JS代码

    1. 用Response.Write方法 代码如下:Response.Write("<script type='text/javascript'>alert("XXX& ...

  7. csharp: Procedure with DAO(Data Access Object) and DAL(Data Access Layer)

    sql script code: CREATE TABLE DuCardType ( CardTypeId INT IDENTITY(1,1) PRIMARY KEY, CardTypeName NV ...

  8. Unity3D脚本语言UnityScript初探

    译者注: Unity3D中支持三种语言:JavaScript.C#.Boo,很多人不知道如何选择,通过这篇译文,我们可以搞清楚这三者语言的来龙去脉,对选择主语言有一定的借鉴意义. 首先,Unity是基 ...

  9. 最小生成树Prim算法(邻接矩阵和邻接表)

    最小生成树,普利姆算法. 简述算法: 先初始化一棵只有一个顶点的树,以这一顶点开始,找到它的最小权值,将这条边上的令一个顶点添加到树中 再从这棵树中的所有顶点中找到一个最小权值(而且权值的另一顶点不属 ...

  10. vmware screen

    1. Question Description: the screen of the vmware looks small . 2. Solution: 2.1 look the size of sc ...