mac app和ios 判断网络连接状态差不多,具体可以参考下面的帖子
https://www.cnblogs.com/wuqh-iOS/p/4720525.html
在这里需要强调的是,在10.10的系统上不能认为只要有kSCNetworkReachabilityFlagsReachable状态就认为有网,这是不对的。
经测试在10.10的系统上断网后,通过SCNetworkReachabilityGetFlags获取到的flag值是7,按位分解后是4+2+1,二进制是0111,对应的状态是kSCNetworkReachabilityFlagsTransientConnection、kSCNetworkReachabilityFlagsReachable和kSCNetworkReachabilityFlagsConnectionRequired。有kSCNetworkReachabilityFlagsConnectionRequired(4)这个状态其实网络还是断开的。所以在10.10上判断网络是否正常的逻辑是下面这样的
- (BOOL)isNetworkAvailable
{
BOOL available = NO;
SCNetworkReachabilityFlags flags = 0;
if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags))
{
if ((flags & kSCNetworkReachabilityFlagsIsLocalAddress) || ((flags & kSCNetworkReachabilityFlagsReachable) && !(flags & kSCNetworkReachabilityFlagsConnectionRequired)))
available = YES;
}
return available;
}
题外话
在类库源码中,编写者很喜欢用位运算,这是为什么呢?其实只是为了简单方便,一个值表示多个含义,也就是让一个位表示一个含义,这样会很省代码。比如7=4+2+1,表示了三个值。