AFNetworking用法及网络监测

原创 2015年11月19日 21:16:29

AFNetworking github : https://github.com/AFNetworking/AFNetworking
Reachability github : https://github.com/tonymillion/Reachability

先分别介绍一下 AFN 和 Reachability 如何进行网络监测

#import "AFNetworkReachabilityManager.h"

    // 如果要检测网络状态的变化,必须用检测管理器的单例的startMonitoring  
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];

    // 检测网络连接的单例,网络变化时的回调方法  
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

        NSLog(@"%ld",status);
    }];

 // 几种不同的网络状态
    /*
     AFNetworkReachabilityStatusUnknown          = -1,  // 未知 
     AFNetworkReachabilityStatusNotReachable     = 0,   // 无连接 
     AFNetworkReachabilityStatusReachableViaWWAN = 1,   // 无线 
     AFNetworkReachabilityStatusReachableViaWiFi = 2,   //  WiFi
     */  

ps : 由于检测网络有一定的延迟,所以如果启动app立即去检测调用[AFNetworkReachabilityManager sharedManager].networkReachabilityStatus 有可能得到的是status == AFNetworkReachabilityStatusUnknown;但是此时明明是有网的,建议在收到监听网络状态回调以后再取[AFNetworkReachabilityManager sharedManager].networkReachabilityStatus。

Reachability

添加框架:SystemConfiguration.framework

#import "Reachability.h"

-(BOOL)isConnectionAvailable{

    BOOL isExistenceNetwork = YES;
    Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
    switch ([reach currentReachabilityStatus]) {
        case NotReachable:
            isExistenceNetwork = NO;
            //NSLog(@"notReachable");
            break;
        case ReachableViaWiFi:
        {    isExistenceNetwork = YES;
//            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"5毛 wifi 5毛 wifi" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
//            alert.delegate = self;
//            [alert show];

    }

            break;
        case ReachableViaWWAN:
            isExistenceNetwork = YES;
            //NSLog(@"3G");
            break;
    }

    if (!isExistenceNetwork) {

        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"没有网络连接" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
        alert.delegate = self;
        [alert show];

        return NO;
    }

    return isExistenceNetwork;
}

如果需要实时的网络状态变化通知,需要用到异步的方式
具体请看: http://www.bubuko.com/infodetail-650914.html

AFNetworking 用法

//GET请求
 #import"AFHTTPRequestOperationManager.h"
//  1 初始化
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//  2 设置返回数据类型
       manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// 3 请求
    [manager GET:@"网址字符串" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

          // 请求成功代码  
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        // 请求失败代码
    }];

其中请求成功的话,就可以直接进行JSON解析

    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
     NSLog(@"%@",dict);

//POST请求
 #import"AFHTTPRequestOperationManager.h"
//  1 初始化
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//  2 设置返回数据类型
       manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// 3 请求
    [manager POST:@"网址字符串" parameters:dict  //参数字典 
    success:^(AFHTTPRequestOperation *operation, id responseObject) {
          // 请求成功代码  
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        // 请求失败代码
    }];

其中请求成功的话,就可以直接进行JSON解析

    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
     NSLog(@"%@",dict);

/*
注意:
1 AFNetworking可以进行JSON数据解析/Plist数据解析.(不支持XML数据解析)

2 URL字符串中如果有特殊字符或者中文字符,AFNETWorking并没有做UTF8的转码,需要:url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 */
版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS 开发 AFNetworking实现网络状态的实时监测

- (void)viewDidLoad { [super viewDidLoad]; [self checkNetworkStatus]; }#pragma mark - 实时监测网络状...
  • kuangdacaikuang
  • kuangdacaikuang
  • 2016年12月04日 19:40
  • 987

iOS 多线程编程<十八、AFNetworking网络监测>

使用AFNetworking中的AFNetworkReachabilityManager类可以方便的对手机网络状态进行监测,具体代码如下: // // ViewController.m // Re...
  • ZhengYanFeng1989
  • ZhengYanFeng1989
  • 2016年11月08日 15:59
  • 168

iOS网络编程3--swift中使用AFNetworking库

iOS开发之网路编程——swift中使用AFNetworking库 一.     AFNetworking简介 AFNetworking是一个轻量级的iOS网络通信类库。它建立在NSURLConn...
  • qq_14920635
  • qq_14920635
  • 2016年04月18日 17:34
  • 986

AFNetworking 3.0 最新实用封装(带缓存)

AFNetworking 的到来使我们开发者又方便了许多,话不多说,直接上代码。 首先 引入框架 AFNetworking框架 GitHub下载地址:https://github.com/AFNet...
  • by3g123
  • by3g123
  • 2016年02月03日 13:05
  • 7951

[iOS10 2017.1.1 Https适配] 使用AFNetWorking3.0 https适配

参考链接: iOS 9 HTTPS适配 http://www.jianshu.com/p/b03ae4a1a2d3 IOS Https适配摸索 http://www.jianshu.com/...
  • grl18840839630
  • grl18840839630
  • 2016年12月27日 17:49
  • 833

AFNetworking3.0的基本使用方法

AFNetworking3.0的基本使用方法
  • super_man_ww
  • super_man_ww
  • 2016年11月09日 10:42
  • 2310

ios 对于AFNetworking3.0的基本使用

AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。AFHTTPRequestOperationManager已经抛弃,所以需要对数据请求进行改动。 G...
  • yc081323
  • yc081323
  • 2016年08月12日 17:17
  • 1813

NSCache在AFNetworking及SDWebImage中的使用流程

SCache是一个可变集合,他存储单元是“key-value”,对key及value都是强引用,这也说明了,NSCache是内存缓存。有些对象创建比较耗时,或不需要二次获取, 所以他们创建或获取后就可...
  • qianlima210210
  • qianlima210210
  • 2015年11月04日 13:43
  • 883

AFNetworking配合Swift3.0请求数据

Swift3.0中AFNetworking的使用
  • feng2qing
  • feng2qing
  • 2016年04月20日 14:48
  • 5391

AFNetWorking用法及缓存处理

AFNetWorking 在IOS开发中是一个经常会用的第三方开源库,其最好处是维护及时,源码开源。 常用GET与POST请求方法: POST请求: ? ...
  • xiaoyangsavvy
  • xiaoyangsavvy
  • 2015年08月13日 11:24
  • 195
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AFNetworking用法及网络监测
举报原因:
原因补充:

(最多只允许输入30个字)