基于AFNetWorking 3.0封装网络请求数据的类

说到封装,首先咱们要说一下AFNetWorking的原理。

ANFetWorking GitHub源码

  1. AFNetworking 3.0 实现完全基于NSURLSessionTask进行封装,NSURLSessionTask 是苹果在iOS7 推出的网络请求api。
  2. 它支持支持https,网络数据请求,文件上传,文件下载,监听手机网络状态(2、3、4、wifi)。
  3. AFURLSessionManager是整个AFNetworking中最核心的一个类。如果想用NSURLSession函数族自己实现网络通讯,可以参考这个类的一些做法。
  4. 直接从NSObject继承而来,并没有直接继承NSURLSession。session成为一个属性,用组合代替继承,更容易理解。
  5. 多线程采用了NSOperationQueue,这是对GCD的一种对象化封装,使用起来更方便,而且能够很方便地实现顺序依赖,取消等功能。

使用

AFNetWorking的使用分为三步

  1. 创建会话(Session)
  2. 创建请求(request)
  3. 创建任务(task),对数据进行上传

闲话少数,咱们直接来封装它。

基于NSObject的类创建一个继承于NSObject类的命名为(个人命名)NetManager的类。
封装的的时候首先需要下载AFNetWorking 这是链接
  基于NSObject的类创建一个继承于NSObject类的NetManager的类。

在 .h中。

//  Copyright © 2017年 马帅. All rights reserved.
//

#import 
#import "AFNetworking.h"
//DownLoadFinishedBlock 是响应成功的回调,返回的是id类型,外部再转换成类型模型就可以了。
typedef  void(^DownLoadFinishedBlock)(id responseObj);
//DownLoadFialedBlock 是响应失败的回调,只有一个 NSError 对象,外部可接收处理。

typedef void (^DownLoadFialedBlock)(NSError*error);

//DownLoadFinishedBlock 是响应成功的回调,返回的是id类型,外部再转换成类型模型就可以了。
typedef  void(^DownLoadFinishedBlock)(id responseObj);
//DownLoadFialedBlock 是响应失败的回调,只有一个 NSError 对象,外部可接收处理。

typedef void (^DownLoadFialedBlock)(NSError*error);


get请求

+(void)doGetWithUrlStr:(NSString*)urlString parameters:(NSDictionary*)dic contentType:(NSString*)type finished:(DownLoadFinishedBlock)finished failure:(DownLoadFialedBlock)fialed;

post请求

+(void)doPostWithUrlStr:(NSString*)urlString parameters:(NSDictionary*)dic contentType:(NSString*)type finished:(DownLoadFinishedBlock)finished failure:(DownLoadFialedBlock)fialed;

在 .m中

GET请求的处理:

+(void)doGetWithUrlStr:(NSString*)urlString parameters:(NSDictionary*)dic contentType:(NSString*)type finished:(DownLoadFinishedBlock)finished failure:(DownLoadFialedBlock)fialed{
    
    AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
    
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:type, nil];
    
    
    
    [manager GET:urlString parameters:dic progress:^(NSProgress * _Nonnull downloadProgress) {
        
        
        
        // 这里可以获取到目前的数据请求的进度
        
        
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        
        
        // 请求成功,解析数据
        
        finished(responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        
        
        // 请求失败
        
        fialed(error);
        
    }];
    
}

POST请求的处理:

+(void)doPostWithUrlStr:(NSString*)urlString parameters:(NSDictionary*)dic contentType:(NSString*)type finished:(DownLoadFinishedBlock)finished failure:(DownLoadFialedBlock)fialed

{
    
    AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
    
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:type, nil];
    
    
    
    [manager POST:urlString parameters:dic constructingBodyWithBlock:^(id  _Nonnull formData) {
        
        
        
        // 拼接data到请求体,这个block的参数是遵守AFMultipartFormData协议的。
        
        
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        
        
        
        // 这里可以获取到目前的数据请求的进度
        
        
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        // 请求成功,解析数据
        
        finished(responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        // 请求失败
        
        fialed(error);
        
    }];
    
}


你可能感兴趣的:(基于AFNetWorking 3.0封装网络请求数据的类)