美文网首页
AFNetworking 3.0的使用

AFNetworking 3.0的使用

作者: HAILK | 来源:发表于2017-06-08 11:02 被阅读0次

    先来说一下AFNetworking从1.0到3.0的发展:

    AFNetworking 1.0完全基于NSURLConnection的API;AFNetworking 2.0在基于NSURLConnection的API基础上,添加了基于NSURLSession的API选项;AFNetworking 3.0则是抛弃的NSURLConnection,完全基于NSURLSession的API.这也是基于苹果弃用NSURLConnection而不得已做出的选择.

    我们在开发中会遇到许多使用AFNetworking2.X或更老的AFNetworking库,它们与最新的AFNetworking是无法兼容的.原因如下:

    1.AFNetworking 3.0移除了下面三个类

    AFURLConnectionOperation

    AFHTTPRequestOperation

    AFHTTPRequestOperationManager

    2.AFNetworking 3.0修改了下面三个类

    UIImageView+AFNetworking

    UIWebView+AFNetworking

    UIButton+AFNetworking

    对以上类的移除和修改导致了AFNetworking3.0无法向上兼容.所以我们在AFNetworking3.0的环境下,就不能去使用AFNetworking3.0之前封装的网络工具类了.解决办法有两个,一个是修改网络工具类,另一个就是重写网络工具类(好吧,其实这就是一个方法).

    如何使用AFNetworking3.0重写网络工具类?

    1.建立会话

    AFHTTPSessionManager *session =[AFHTTPSessionManager manager];

    session.requestSerializer=[AFJSONRequestSerializer serializer];

    NSMutableDictionary*parameters=[NSMutableDictionary dictionary];

    parameters[@"start"] =@"1";

    parameters[@"end"] =@"5";

    2.get请求

    [session GET:urlStr parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

    successBlock(responseObject);

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

    failureBlock(error);

    }];

    3.post请求

    [session POST:urlStr parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

    successBlock(responseObject);

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

    failureBlock(error);

    }];

    封装一个通用的网络请求方式:

    1.单例类

    + (instancetype)sharedTools {

    static QLMNetworkTools *tools;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

    tools = [[QLMNetworkTools alloc] initWithBaseURL:[NSURL URLWithString:@"http://www.baidu.com"]];

    tools.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];

    });

    return tools;

    }

    2.通用的请求方式

    - (void)requestWithType: (RequestType)requestType andUrlStr: (NSString *)urlStr andParams: (id)parameters andSuccess: (void (^)(id responseObject))successBlock andFailture: (void (^)(NSError *error))failureBlock{

    if (requestType == GET) {

    [self GET:urlStr parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

    successBlock(responseObject);

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

    failureBlock(error);

    }];

    } else {

    [self POST:urlStr parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

    successBlock(responseObject);

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

    failureBlock(error);

    }];

    }

    }

    相关文章

      网友评论

          本文标题:AFNetworking 3.0的使用

          本文链接:https://www.haomeiwen.com/subject/osuzfxtx.html