zoukankan      html  css  js  c++  java
  • iOS开发网络篇—Reachability检测网络状态

     前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理。最好能监听设备的网络状态的改变,当设备网络状态连接、断开时,程序也应该有相应的处理。

     开发工具:xcode6.3.2 操作系统:OS X Yosemite10.10.4 学习来源:《疯狂IOS讲义(下)》中的ios网络应用编程

    1、下载,添加Reachability类。

    官网下载网址:

    https://developer.apple.com/library/prerelease/ios/samplecode/Reachability/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007324-Intro-DontLinkElementID_2

    获取下载的zip文件包找到里面的:reachability.m和reachability.h然后放进工程下:

    2、

    添加SystemConfiguration.framework框架

    然后打开Main.storyborad界面设计文件,添加1个UILabel、1个UITextField和3个UIButton,并将它们摆放整齐,如图:

     

    为了在程序钟访问界面上的文本框,可以将文本框绑定到siteField IBOulet属性;为了让程序能响应界面上3个按钮的点击事件,还需要为“测试”按钮的“Touch Up Inside”事件绑定testNetStatus事件处理方法,为“测试wifi”按钮的“Touch Up Inside”事件绑定testWifi事件处理方法,为了“测试3G/4G”按钮的“Touch Up Inside”事件绑定testInternet事件处理方法。

    3、实现网络监听以及按钮测试的代码:

    要点:

    <1>如果是要自动监听手机联网的状态,就需要使用默认的通知中心对象[NSNotificationCenter defaultCenter]来通过监听

    kReachabilityChangedNotification通知,并且当通知中心收到通知,就触发另一个自定义的成员方法的reachabilityChanged:方法。

    源代码写法:

    [[NSNotificationCenter defaultCenter] addObserver:self

    selector:@selector(netChanged:) name:kReachabilityChangedNotification

    object:nil];

    <2>然后是不管是在上面创建通信中心之后,还是在为按钮组件的触发点击事件绑定的代码中,都要创建一个网络可达型对象(有两种):

    -1-Reachability *reach = [Reachability reachabilityWithHostName:”www….”]

    -2-Reachability *reach =[Reachability reachabilityForInternetConnection]

    <3>然后通过Reachability对象获取当前网络状态:

    [reach currentReachabilityStatus]

    这个方法返回的就是Reachability声明中声明了的枚举三个枚举值:

    typedef  enum : NSInteger {

               NotReachable = 0,

               ReachableViaWiFi,

               ReachableViaWWAN

    } NetworkStatus;

    也就是说这三个值代表着网络连接三种状态。

    另外补充:

    很奇怪的是:和《疯狂IOS讲义下》(8.1检测网络状态)提供的源代码不一样的地方是以上网络状态除了绑定组件监听事件,也就是自动监听网络状态的代码可以仅仅写在托管类AppDelegate.m中就可以运行,ViewController.m可以不写任何代码就可以运行。

    但是自己新建的oc程序,然后按照同样的步骤压迫实现同样效果却需要额外的条件:

    必须在ViewController.h声明一个私有的成员变量:

    @property (nonatomic,strong) Reachability *conn;

    然后在ViewController.m中用conn创建一个Reachability对象,并且

    [conn startNotifier]。

    然后才能在ViewController.m中或者AppDelegate.m中设置自动监听网络状态的代码。

    ----------------------------------------------------------------------------------------------------------------------------------------------------------

    以上是本人半年前的学习积累,其中关于最后的"另外补充"其实就是很基本的原因,就是没有使用property的全局作用使得Reachability只能作用于某个方法内部,从而会在程序运行过程中就会出现无效的结果。

    下面是本人在2016年2月25日更新的网络监听代码使用快速一览

    ----------------------------------------------------------------------------------------------------------------------------------------------------------
     
     
     
     
  • 相关阅读:
    oracle中视图v$sql的用途
    maven 安装jar包命令
    Maven常见异常及解决方法
    对oracle实例的内存(SGA和PGA)进行调整,优化数据库性
    oracle中lock和latch的用途
    oracle中awr性能报告阅读笔记
    oracle 查看并行sql语句的并行数量和如何开并行
    DBMS_STATS.GATHER_TABLE_STATS详解
    关于加快INSERT语句执行速度和HINT /*+ append */及/*+ append nologging */的使用
    oracle查看表占用磁盘空间
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/4642980.html
Copyright © 2011-2022 走看看