第三方类AFNetworking

1、AFNetworking简介

AFNetworking是一个在iOS开发中使用非常多的轻量级网络开源库
适用于iOS以及Mac OS X。它构建于在(Apple iOS开发文档) NSURLConnection ,  NSOperation , 以及其他熟悉的Foundation技术之上。
它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松。
官方链接http://cocoadocs.org/docsets/AFNetworking/1.3.0/

2、AFNetworking使用(使用CocoaPods管理)

2.1网络监测

 1 #import "ViewController.h"
 2 // 网络请求的头文件
 3 #import <AFNetworking.h>
 4 @interface ViewController ()
 5 {
 6     /// 进行网络监测判断的BOOL值
 7     BOOL isOpen;
 8 }
 9 @end
10 
11 @implementation ViewController
12 
13 - (void)viewDidLoad {
14     [super viewDidLoad];
15     
16 }
17 
18 #pragma mark - 实时监测当前网络状态
19 - (IBAction)networkMonitoringAction:(id)sender {
20     if (!isOpen) {
21         // 打开网络监测
22         [[AFNetworkReachabilityManager sharedManager] startMonitoring];
23         isOpen = YES;
24     } else {
25         // 关闭网络监测
26         [[AFNetworkReachabilityManager sharedManager] stopMonitoring];
27         isOpen = NO;
28     }
29     // 判断当前是wifi状态、3g、4g还是网络不可用状态
30     [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
31         /**
32          AFNetworkReachabilityStatusUnknown          = -1,  // 未知网络
33          AFNetworkReachabilityStatusNotReachable     = 0,   // 没有网络连接
34          AFNetworkReachabilityStatusReachableViaWWAN = 1,   // 3g,4g
35          AFNetworkReachabilityStatusReachableViaWiFi = 2,   // WIFI状态
36          */
37         switch (status) {
38             case AFNetworkReachabilityStatusUnknown:
39                 NSLog(@"当前网络处于未知状态");
40                 break;
41             case AFNetworkReachabilityStatusNotReachable:
42                 NSLog(@"当前没有网络连接");
43                 break;
44             case AFNetworkReachabilityStatusReachableViaWiFi:
45                 NSLog(@"当前处于WIFI状态");
46                 break;
47             case AFNetworkReachabilityStatusReachableViaWWAN:
48                 NSLog(@"当前处于移动网络状态,请您注意您的流量");
49                 break;
50             default:
51                 break;
52         }
53     }];
54     
55 }

2.2 Get、Post请求,网络加载时"菊花"的设置

 1 #import "ViewController.h"
 2 // 网络请求的头文件
 3 #import <AFNetworking.h>
 4 #import <AFNetworkActivityIndicatorManager.h>
 5 @interface ViewController ()
 6 /// 用于网络请求的session对象
 7 @property (nonatomic, strong) AFHTTPSessionManager *session;
 8 
 9 @end
10 
11 @implementation ViewController
12 
13 - (void)viewDidLoad {
14     [super viewDidLoad];
15     // 单例 初始化session对象
16     self.session = [AFHTTPSessionManager manager];
17     // 设置请求返回支持的文件类型
18     self.session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"application/x-json",@"text/html", nil];
19 
20     // 转圈圈的菊花默认是关闭的,需要手动打开,在网络慢的情况下请求数据时,手机左上角就会出现转圈圈的菊花
21     [AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
22 }
23 
24 #pragma mark - get网络请求
25 - (IBAction)getRequestAction:(id)sender {
26     /**
27      参数1:get请求的网址
28      参数2:拼接的参数,get请求不需要
29      参数3:当前进度,下载时常用,block传进来的参数downloadProgress就是下载进度
30      参数4:请求成功时调用的block,responseObject是请求到的数据
31      参数5:请求失败时调用的block
32      */
33     [self.session GET:@"http://api.yhouse.com/m/city/dynmiclist" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
34         NSLog(@"下载进度");
35     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
36         // 打印请求到的数据
37         NSLog(@"请求成功%@", responseObject);
38        // 解析数据代码写在这里
39     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
40         NSLog(@"请求失败");
41     }];
42 }
43 #pragma mark - post网络请求(表单上传)
44 - (IBAction)postRequestAction:(id)sender {
45     // body体
46     /*{
47      do = "pri_memberlist";
48      "member_id" = zpHr2dsRvQQxYJxo2;
49      "workspace_id" = ILfYpE4Dhs2gWcuQx;
50      }*/
51     
52     /**
53      参数1:post请求的网址
54      参数2:拼接的body体
55      参数3:当前上传进度,block传进来的参数uploadProgress就是上传进度
56      参数4:请求成功时调用的block,responseObject是请求到的数据
57      参数5:请求失败时调用的block
58      */
59     NSString *urlStr = @"http://m.taskwedo.com/API/wedo1/wedo.php";
60     NSMutableDictionary *dataDic = [NSMutableDictionary dictionary];
61     [dataDic setValue:@"pri_memberlist" forKey:@"do"];
62     [dataDic setValue:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"];
63     [dataDic setValue:@"ILfYpE4Dhs2gWcuQx" forKey:@"workspace_id"];
64     
65     [self.session POST:urlStr parameters:dataDic progress:^(NSProgress * _Nonnull uploadProgress) {
66         NSLog(@"上传进度");
67     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
68         NSLog(@"请求成功%@", responseObject);
69         // 解析数据代码写在这里
70     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
71         NSLog(@"请求失败");
72     }];
73 }   
原文地址:https://www.cnblogs.com/fearlessyyp/p/5536014.html