[10秒学会] - iOS 网络检测(如需要更详细 请用Reachability)

前言:我是赵大财,10秒学会系列,绝不废话连篇! 力求10秒,让你了解会用此知识点


如果需要更加强大的检测  请到 http://my.oschina.net/zhaodacai/blog/644188


h 文件

//
//  DCCheckNetwork.h
//  DCCheckNetwork
//
//  Created by 赵大财 on 16/4/7.
//  Copyright © 2016年 tshiny. All rights reserved.
//

#import <Foundation/Foundation.h>
#import<SystemConfiguration/SCNetworkReachability.h>

@interface DCCheckNetwork : NSObject

+ (BOOL)connectedToNetwork;

@end

m 文件

//
//  DCCheckNetwork.m
//  DCCheckNetwork
//
//  Created by 赵大财 on 16/4/7.
//  Copyright © 2016年 tshiny. All rights reserved.
//

#import "DCCheckNetwork.h"

@implementation DCCheckNetwork

+ (BOOL)connectedToNetwork
{
    
    //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
    struct sockaddr_storage zeroAddress;
    
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.ss_len = sizeof(zeroAddress);
    zeroAddress.ss_family = AF_INET;
    
    //Recover reachability flags
    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
    SCNetworkReachabilityFlags flags;
    
    //获得连接的标志
    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
    CFRelease(defaultRouteReachability);
    
    //如果不能获取连接标志,则不能连接网络,直接返回
    if (!didRetrieveFlags)
    {
        return NO;
    }
    
    //根据获得的连接标志进行判断
    BOOL isReachable = flags & kSCNetworkFlagsReachable;
    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
    return (isReachable&&!needsConnection) ? YES : NO;
    
}

@end

你可能感兴趣的:(iOS网络检测)