您的位置:首页 > 理论基础 > 计算机网络

iOS网络状态(一)

2016-01-25 20:53 881 查看

iOS网络状态(一)

主题 《iOS开发》 by evan

SCNetworkReachabilityRef

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

如何获取网络状态

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

创建
SCNetworkReachabilityRef


创建一个
SCNetworkReachabilityRef
有三中方式,

Creating a Reachability Reference
SCNetworkReachabilityCreateWithAddress
SCNetworkReachabilityCreateWithAddressPair
SCNetworkReachabilityCreateWithName


如何获取网络信息

通过第二步差创建的
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,用起来也比较简单。不过,如果你想更进一步了解整个底层的实现机制,还是建议你自己去实践,这样如果后期项目中有改动,也就能更加得心应手,好不生疏。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios