iOS AFN 3.0版本前后区别 01

//联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄

一、AFN 版本的概念

在AFNetworking 3.0之前,底层是通过封装NSURLConnection来实现的。

在AFNetworking 3.0之后,也就是在iOS9.0 之后,NSURLConnection被弃用,苹果推荐使用NSURLSession来管理网络请求,所以AFNetworking 3.0之后,底层是通过封装NSURLSession来实现的。

从AFNetworking 3.0中之后,下面三个方法被弃用了。

AFURLConnectionOperation

AFHTTPRequestOperation

AFHTTPRequestOperationManager

依次被下面三个类代替了,同时请求方法也跟着改变了,所以AFNetworking 3.0以后发生了很大的变化。

AFURLSessionManager

AFHTTPSessionManager

AFNetworkReachabilityManager

二、GET请求

//创建请求管理者AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];    manager.responseSerializer= [AFHTTPResponseSerializer serializer];//内容类型manager.responseSerializer.acceptableContentTypes= [NSSet setWithObjects:@"application/json",@"text/json",@"text/javascript",@"text/html",nil];//get请求[manager GET:URL parameters:nilprogress:^(NSProgress * _Nonnull downloadProgress) {//数据请求的进度} success:^(NSURLSessionDataTask * _Nonnull task,id_Nullable responseObject) {//数据请求成功后,返回 responseObject 结果集} failure:^(NSURLSessionDataTask * _Nullable task,NSError* _Nonnull error) {//数据请求失败,返回错误信息原因 error}];

详细内容链接:http://write.blog.csdn.net/postedit/75331411

三、POST 请求

//创建请求管理者AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//manager.responseSerializer= [AFHTTPResponseSerializer serializer];//内容类型manager.responseSerializer.acceptableContentTypes= [NSSet setWithObjects:@"application/json",@"text/json",@"text/javascript",@"text/html",nil];NSMutableDictionary*parameters = @{@"":@"",@"":@""}.mutableCopy;//post请求[manager POST:URL parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {//数据请求的进度} success:^(NSURLSessionDataTask * _Nonnull task,id_Nullable responseObject) {//数据请求成功后,返回 responseObject 结果集} failure:^(NSURLSessionDataTask * _Nullable task,NSError* _Nonnull error) {//数据请求失败,返回错误信息原因 error}];

四、下载

- (void)downLoad{//1.创建管理者对象AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2.确定请求的URL地址NSURL*url = [NSURLURLWithString:@""];//3.创建请求对象NSURLRequest*request = [NSURLRequestrequestWithURL:url];//下载任务NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {//打印下下载进度WKNSLog(@"%lf",1.0* downloadProgress.completedUnitCount/ downloadProgress.totalUnitCount);    } destination:^NSURL* _Nonnull(NSURL* _Nonnull targetPath, NSURLResponse * _Nonnull response) {//下载地址WKNSLog(@"默认下载地址:%@",targetPath);//设置下载路径,通过沙盒获取缓存地址,最后返回NSURL对象NSString*filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask,YES)lastObject];return[NSURLURLWithString:filePath];    } completionHandler:^(NSURLResponse * _Nonnull response,NSURL* _Nullable filePath,NSError* _Nullable error) {//下载完成调用的方法WKNSLog(@"下载完成:");        WKNSLog(@"%@--%@",response,filePath);    }];//开始启动任务[task resume];}

五、上传

/**

*  AFN 3.0 上传

*      有两种方式

*          upLoad1 和 upLoad2

*///第一种方法是通过工程中的文件进行上传- (void)upLoad1{//1。创建管理者对象AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2.上传文件NSDictionary*dict = @{@"username":@"1234"};NSString*urlString = @"22222";    [manager POST:urlString parameters:dict constructingBodyWithBlock:^(id  _Nonnull formData) {//上传文件参数UIImage*iamge = [UIImageimageNamed:@"123.png"];        NSData *data = UIImagePNGRepresentation(iamge);//这个就是参数[formData appendPartWithFileData:data name:@"file"fileName:@"123.png"mimeType:@"image/png"];    } progress:^(NSProgress * _Nonnull uploadProgress) {//打印下上传进度WKNSLog(@"%lf",1.0*uploadProgress.completedUnitCount/ uploadProgress.totalUnitCount);    } success:^(NSURLSessionDataTask * _Nonnull task,id_Nullable responseObject) {//请求成功WKNSLog(@"请求成功:%@",responseObject);    } failure:^(NSURLSessionDataTask * _Nullable task,NSError* _Nonnull error) {//请求失败WKNSLog(@"请求失败:%@",error);    }];}//第二种是通过URL来获取路径,进入沙盒或者系统相册等等- (void)upLoda2{//1.创建管理者对象AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2.上传文件NSDictionary*dict = @{@"username":@"1234"};NSString*urlString = @"22222";    [manager POST:urlString parameters:dict constructingBodyWithBlock:^(id  _Nonnull formData) {        [formData appendPartWithFileURL:[NSURLfileURLWithPath:@"文件地址"] name:@"file"fileName:@"1234.png"mimeType:@"application/octet-stream"error:nil];    } progress:^(NSProgress * _Nonnull uploadProgress) {//打印下上传进度WKNSLog(@"%lf",1.0*uploadProgress.completedUnitCount/ uploadProgress.totalUnitCount);    } success:^(NSURLSessionDataTask * _Nonnull task,id_Nullable responseObject) {//请求成功WKNSLog(@"请求成功:%@",responseObject);    } failure:^(NSURLSessionDataTask * _Nullable task,NSError* _Nonnull error) {//请求失败WKNSLog(@"请求失败:%@",error);    }];}监测当前网络状态(网络监听)- (void)AFNetworkStatus{//1.创建网络监测者AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];/*枚举里面四个状态  分别对应 未知 无网络 数据 WiFi

typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {

AFNetworkReachabilityStatusUnknown          = -1,      未知

AFNetworkReachabilityStatusNotReachable    = 0,      无网络

AFNetworkReachabilityStatusReachableViaWWAN = 1,      蜂窝数据网络

AFNetworkReachabilityStatusReachableViaWiFi = 2,      WiFi

};

*/[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {//这里是监测到网络改变的block  可以写成switch方便//在里面可以随便写事件switch(status) {caseAFNetworkReachabilityStatusUnknown:                WKNSLog(@"未知网络状态");break;caseAFNetworkReachabilityStatusNotReachable:                WKNSLog(@"无网络");break;caseAFNetworkReachabilityStatusReachableViaWWAN:                WKNSLog(@"蜂窝数据网");break;caseAFNetworkReachabilityStatusReachableViaWiFi:                WKNSLog(@"WiFi网络");break;default:break;        }    }] ;}


谢谢!!!

你可能感兴趣的:(iOS AFN 3.0版本前后区别 01)