网络编程(五)AFNetworking 的使用
- 发送 GET 请求:
1 //获得请求管理者 2 AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; 3 4 //发送GET请求 5 [mgr GET:@“访问的 url" parameters:nil 6 success:^(AFHTTPRequestOperation *operation, NSDictionary *dict) { 7 //请求成功 8 } 9 failure:^(AFHTTPRequestOperation *operation, NSError *error) { 10 //请求失败 11 }]; 12
- 发送 POST 请求:
1 //获得请求管理者 2 AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; 3 mgr.responseSerializer = [AFXMLParserResponseSerializer serializer]; 4 5 //发送POST请求 6 [mgr POST:@“访问的 url" parameters:@{@"type" : @"XML"} 7 success:^(AFHTTPRequestOperation *operation, NSXMLParser *parser) { 8 9 } 10 failure:^(AFHTTPRequestOperation *operation, NSError *error) { 11 //请求失败 12 }];
mgr.responseSerializer = [AFJSONRequestSerializer serializer];
1 //获得请求管理者 2 AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; 3 4 //发送请求(做文件上传) 5 // parameters : 只能放非文件参数 6 NSMutableDictionary *params = [NSMutableDictionary dictionary]; 7 params[@"username"] = @“用户名"; 8 9 [mgr POST: @“上传 url” parameters:params 10 constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 11 // 要上传的文件必须放在这里 12 NSString *file = [[NSBundle mainBundle] pathForResource:@"测试.txt" ofType:nil]; 13 NSData *data = [NSData dataWithContentsOfFile:file]; 14 15 // 拼接文件参数,必须指明文件的 mimeType 类型 16 [formData appendPartWithFileData:data name:@"file" fileName:@"123.txt" mimeType:@"text/plain"]; 17 } 18 success:^(AFHTTPRequestOperation *operation, id responseObject) { 19 20 } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 21 22 }];
1 //获得网络监控的管理者 2 AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager]; 3 //设置网络状态改变后的处理 4 [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 5 6 // 当网络状态改变了, 就会调用这个block 7 switch (status) { 8 case AFNetworkReachabilityStatusUnknown: 9 // 未知网络 10 break; 11 12 case AFNetworkReachabilityStatusNotReachable: 13 // 没有网络(断网) 14 break; 15 16 case AFNetworkReachabilityStatusReachableViaWWAN: 17 // 手机自带网络 18 break; 19 20 case AFNetworkReachabilityStatusReachableViaWiFi: 21 // WIFI 22 break; 23 } 24 }]; 25 //开始监控 26 [mgr startMonitoring];
- ASI 因为是基于底层的 CFNetwork 框架的所以性能更好
- AFN 基于 NSURLConnection 框架性能相对弱一些
- AFN 可以根据返回的数据类型进行自动解析数据,JSON 转换为 NSDictionary 或 NSArray,XML 转化为 NSXMLParser
- ASI 没有对数据进行解析,直接返回 NSData 二进制数据
- AFN 含有请求成功和失败2个 block 方便使用对请求进行处理
- ASI 有三种请求处理方式:代理方法/block方法/SEL方法
- 自带缓存(AFN 使用系统的 NSURLCache)
- 可以方便的监听请求进度,轻松实现断点下载(注意,ASI 没有断点上传)
- ASIHttpRequest 继承自 NSOperation 所以可以使用队列统一管理所有请求,请求之间也可设置依赖
- 使用简单
- 自带网络监控功能
五、项目中的 AFNetworking 等第三方框架的使用
在项目中为了减少对第三方框架的依赖,一般需要在第三方框架上再封装一层工具层来请求数据,但光是这样还是不够的,更进一步还可以在网络数据请求的工具类上再封装一层数据请求工具类,在这一层工具类中判断是否有缓存,有缓存就直接使用缓存,没有缓存才需要网络请求,而数据的请求者只需要直接使用最上层的数据请求类,不需要知道要访问的数据是从何而来,如下:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。