公司的项目一直都是用的AFNetWorking2.1,最近打算开一个新项目,于是想着更新下AFNetWorking3.0,不看不知道一看还真有点操蛋,方法变化很多,最明显的就是3.0里面抛弃了原有的Operation方法,大力推广Session方法里面的很多方法回调都变了,很是操蛋,,不过该有的功能,实现都只是换了个方式实现,,接下来就把两者的区别和替换方法记录下来,也为其他的小伙伴省去麻烦。demo也在同步制作中,稍后上线。
先说明一下,在这里我全部用的管理区manager,而不是单单一个session。这里我们就不说 用manager直接post或者get的方法,,我们主要讲下task的使用方法,这种方法更全面,更利于封装。
1:管理器区别
AFHTTPRequestOperationManager --------》 AFHTTPSessionManager
//参数编码格式转换
requestString = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
2:请求体参数区别,封装方法一样
//转换请求链接格式 其中 requestString 是地址接口 postParameters是字典型参数
NSMutableURLRequest *request = [manager.requestSerializerrequestWithMethod:@“GET” URLString:requestStringparameters:postParameters error:nil];
3:请求方法,区别很大
2.1里面,我们可以直接在回调的responseObject里面获取数据
AFHTTPRequestOperation *operation = [managerHTTPRequestOperationWithRequest:requestsuccess:^(AFHTTPRequestOperation *operation,id responseObject)
{
NSDictionary *resultDict = responseObject;//这就是我们想要的数据,也可以设置成自己封装的格式
} failure:^(AFHTTPRequestOperation *operation,NSError *error) {
}
3.0里面
NSURLSessionDataTask *dataTask = [managerdataTaskWithRequest:request completionHandler:^(NSURLResponse *_Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
//在这里我们可以处理我们自己的数据
//状态码
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
NSInteger responseStatusCode = [httpResponsestatusCode];
NSLog(@"%ld", responseStatusCode)
success(responseObject);//数据 q
}];
[dataTaskresume];
总结:看似上面很少的几行代码却都是总结出来的结果。过程其实很复杂,所以结果才会简单,这就是代码的魅力。
刚学习3.0的时候查询了很多的资料,如大海捞针,又千篇一律。。。总之就是从一堆交织错乱的毛线团中找到自己想要的那根线,然后制成自己的毛衣。
思路:简单总结下思路,首先创建管理类manager,上面忘了写了 在下面补上,就是返回manager。然后封装参数数据,用requestSerializer里面的reques方法封装成nsurlrequest请求链接
,有了请求链接,然后我们就该去使用它,在这里用到新的task!通过sessiontask的回调完成数据请求,这样一整套数据请求流程就下来了。
+ (AFHTTPSessionManager *) getManager
{
Reachability *reachability = [ReachabilityreachabilityForInternetConnection];
isReachable = [reachabilityisReachable];
staticAFHTTPSessionManager *manager = nil;
staticdispatch_once_t predicate;
dispatch_once(&predicate, ^{
manager = [[AFHTTPSessionManageralloc] init];
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializerserializer];
[manager setRequestSerializer:serializer];
AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializerserializer];
[manager setResponseSerializer:responseSerializer];
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypessetByAddingObject:@"text/html"];
[[AFNetworkActivityIndicatorManagersharedManager] setEnabled:YES];
[manager.reachabilityManagerstartMonitoring];
});
return manager;
}
这里我们可以实现请求GET POST 下篇文章我们记录 上传、下载功能新方法!demo也在同步进行中,,完善后第一时间分享给大家。
在这里打个广告,这是我的个人公众号,里面有ios开发心得,知识总结,,也有java新手上路知识。demo会在第一时间同步到里面。多谢关注,一起进步!