iOS开发中检测网络状态

        在网络应用中,我们要经常对用户的设备进行网络的实时监控,以便让用户了解自己的网络状态,防止一些误会,还可以根据用户的网络状态进行智能处理,节省用户流量,提高用户体验。例如:

        1.WIFI/3G网络:自动下载高清图片

        2.低速网络:只下载缩略图

        3.没有网络:只显示离线的缓存数据

 

苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态,下载地址:

https://developer.apple.com/library/prerelease/ios/samplecode/Reachability/Reachability.zip

在使用的时候需要导入框架SystemConfiguration.framework,没有使用ARC机制,如果你的项目使用了ARC,需要为Reachability.m单独设置编译选项:-fno-objc-arc。

        下面看一下Reachability.h文件。

        1、代表网络状态的枚举:

typedef enum : NSInteger {
    NotReachable = 0,
    ReachableViaWiFi,
    ReachableViaWWAN
} NetworkStatus;

NotReachable: 网络不可达

ReachableViaWiFi:通过WiFi可达

ReachableViaWWAN:通过无线广域网可达

        2、下面是相关接口和注释

/*!
 * 用于检测网络请求是否可以到达指定的主机名
 */
+ (instancetype)reachabilityWithHostName:(NSString *)hostName;

/*!
 * 用于检测网络请求是否可以到达给定的ip地址
 */
+ (instancetype)reachabilityWithAddress:(const struct sockaddr_in *)hostAddress;

/*!
 * 检查默认的路由器是否有效. 用于不连接到特定主机的应用.
 */
+ (instancetype)reachabilityForInternetConnection;

/*!
 * 检测本地的WiFi连接是否有效
 */
+ (instancetype)reachabilityForLocalWiFi;

/*!
 * 开始监听在当前的runloop中的通知.
 */
- (BOOL)startNotifier;
- (void)stopNotifier;

//获取网络状态
- (NetworkStatus)currentReachabilityStatus;

/*!
 * 连接需求
 */
- (BOOL)connectionRequired;

        3、网络连接状态改变时的通知标识

NSString *kReachabilityChangedNotification = @"kNetworkReachabilityChangedNotification";

 

posted @ 2015-07-22 09:56  驴车手  阅读(575)  评论(0编辑  收藏  举报