将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 AFNetworking 第三方集成到工程中,具体请看上篇博客iOS学习46之第三方CocoaPods的安装和使用(通用方法)
AFNetworking简介
-
AFNetworking是一个 在iOS开发中 使用非常多网络开源库,是一个轻量级的网络请求API类库。
-
适用于iOS以及Mac OS X。它构建于在(Apple iOS开发文档) NSURLSession , NSOperation , 以及其他熟悉的Foundation技术之上,核心代码: AFHTTPSessionManager。
-
它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松。
-
官方链接http://cocoadocs.org/docsets/AFNetworking/1.3.0/
AFHTTPSessionManager
AFHTTPSessionManager是核心网络请求的管理类,用于管理 GET 和 POST 请求
AFHTTPSessionManager对象的声明和懒加载代码:
#import "ViewController.h"
// 网络的请求头文件
#import <AFNetworking/AFNetworking.h>
@interface ViewController ()
/// 用于网络请求的session对象
@property (nonatomic, strong) AFHTTPSessionManager *session;
@end
@implementation ViewController
// 懒加载
- (AFHTTPSessionManager *)session
{
if (!_session) {
_session = [AFHTTPSessionManager manager];
// 设置请求接口回来的时候,支持什么类型的数据
_session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/java script",@"application/x-json",@"text/html", nil];
}
return _session;
}
@end
AFNetworking进行网络监测
在进行网络监测的时候,首先应该先判断网络监测是否打开,如果没有打开,先要打开监测
- (void)startMonitoring; // 打开网络监测
- (void)stopMonitoring; // 关闭网络监测
接下来就判断当前的网络状态,AFNetworking有几种不同的网络状态
// 几种不同的网络状态
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
AFNetworkReachabilityStatusUnknown = -1, // 当前网络处于未知状态,手机没有信号
AFNetworkReachabilityStatusNotReachable = 0, // 当前网络处于未连接状态,手机没有开流量或开WiFi
AFNetworkReachabilityStatusReachableViaWWAN = 1, // 手机流量网络
AFNetworkReachabilityStatusReachableViaWiFi = 2, // WiFi状态
};
实例代码:
#pragma mark - 网络监测按钮的响应方法
- (IBAction)networkMonitoringAction:(UIButton *)sender
{
if (!isOPen) {
// 打开网络监测的方法
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
isOPen = YES;
} else {
// 关闭网络监测
[[AFNetworkReachabilityManager sharedManager] stopMonitoring];
isOPen = NO;
}
// 接下来判断当前是WiFi状态还有3g状态,网络不可用状态
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"当前网络处于未知状态,手机没有信号");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"当前网络处于未连接状态,手机没有开流量或开WiFi");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"手机流量网络");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WiFi状态");
break;
default:
break;
}
}];
}
AFNetworking的GET请求
AFNetworking1.3.0 不再想以前一样一个 GET 请求需要很多的类参与,这里这需要一个 AFHTTPSessionManager 的方法就可以完成
方法:
- (NSURLSessionDataTask *)GET:(NSString *)URLString // get请求的网址
parameters:(id)parameters // 拼接的参数
progress:(void (^)(NSProgress * _Nonnull))downloadProgress // 下载的进度
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success // 请求成功
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure // 请求失败
实例代码:
#pragma mark - GET请求的响应方法
- (IBAction)getRequestAction:(id)sender
{
[self.session GET:@"http://api.yhouse.com/m/city/dynmiclist" // get请求的