iOS网络状态(一)

iOS网络状态(一)

主题 《iOS开发》 by evan

SCNetworkReachabilityRef

在开发过程中,只要是你的app与网络打交道,难免会涉及到监听网络的状态,知道了网络的能力或者状态,你的app就可以提前预判到一些问题,从而拥有更加友好的交互逻辑。

  1. 如何获取网络状态

    官方文档中我们可以知道,通过创建一个SCNetworkReachabilityRef对象,然后调用SCNetworkReachabilitySetCallback函数,就可以获取到设备当前的网络信息。

  2. 创建SCNetworkReachabilityRef

    创建一个SCNetworkReachabilityRef有三中方式,

    Creating a Reachability Reference
    SCNetworkReachabilityCreateWithAddress
    SCNetworkReachabilityCreateWithAddressPair
    SCNetworkReachabilityCreateWithName
  3. 如何获取网络信息

    通过第二步差创建的SCNetworkReachabilityRef调用如下方法

    Boolean SCNetworkReachabilitySetCallback (SCNetworkReachabilityRef target, SCNetworkReachabilityCallBack callout, SCNetworkReachabilityContext *context );

    然后调用
    Boolean
    SCNetworkReachabilityGetFlags (
    SCNetworkReachabilityRef target,
    SCNetworkReachabilityFlags *flags
    )

    方法,判断flag和以下枚举的关系,即可获知当前的网络状态。

    typedef CF_OPTIONS(uint32_t, SCNetworkReachabilityFlags) {
    kSCNetworkReachabilityFlagsTransientConnection  = 1<<0,
    kSCNetworkReachabilityFlagsReachable        = 1<<1,
    kSCNetworkReachabilityFlagsConnectionRequired   = 1<<2,
    kSCNetworkReachabilityFlagsConnectionOnTraffic  = 1<<3,
    kSCNetworkReachabilityFlagsInterventionRequired = 1<<4,
    kSCNetworkReachabilityFlagsConnectionOnDemand   = 1<<5, // __OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_3_0)
    kSCNetworkReachabilityFlagsIsLocalAddress   = 1<<16,
    kSCNetworkReachabilityFlagsIsDirect     = 1<<17,
    `#if    TARGET_OS_IPHONE
    kSCNetworkReachabilityFlagsIsWWAN       = 1<<18,
    `#endif // TARGET_OS_IPHONE
    
    kSCNetworkReachabilityFlagsConnectionAutomatic  = kSCNetworkReachabilityFlagsConnectionOnTraffic
    };

代码实现

在github上早就有高人开源了代码Reachability,用起来也比较简单。不过,如果你想更进一步了解整个底层的实现机制,还是建议你自己去实践,这样如果后期项目中有改动,也就能更加得心应手,好不生疏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值