Reachability的使用相关问题

来源:互联网 发布:算法工程师学什么专业 编辑:程序博客网 时间:2024/05/21 17:43

最近在做东西的时候,遇到收通知很慢的问题,后来才现是使用不当。

1.版本问题

使用2.0之前及之后,不太一样。2.0前的没用过,就不多说了,看下面文章即可。

判断是否打开WiFi以及是否打开3G的用法还真没见过。

2.用法问题

用法的话,开始启动时应该就有一个值,当前网络的状态,通知与首次无关。


以下为转

[iOS]网络编程专题:Reachability的使用

  • 博客分类: 
  • iOS
reachabilityappleiOS 

什么是UDPTCP的区别是什么?
TCP的全称为传输控制协议。这种协议可以提供面向连接的、可靠的、点到点的通信。
UDP全称为用户数据报协议,它可以提供非连接的不可靠的点到多点的通信。
用TCP还是UDP,那要看你的程序注重哪一个方面?可靠还是快速?

 

 

 

TCP/IP 建立连接的过程 
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 
第一次握手:建立连接时,客户端发送连接请求到服务器,并进入SYN_SEND状态,等待服务器确认; 
第二次握手:服务器收到客户端连接请求,向客户端发送允许连接应答,此时服务器进入SYN_RECV状态; 
第三次握手:客户端收到服务器的允许连接应答,向服务器发送确认,客户端和服务器进入通信状态,完成三次握手。
 
(所谓的三次握手就是要有三次连接信息的发送/接收过程TCP连接的建立需要进行三次连接信息的发送/接收

 


一:确认网络环境3G/WIFI

    1.添加源文件和framework
    
   开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审(我们的)查的。
    Apple 的 例程Reachability中介绍了取得/检测网络状态的方法。要在应用程序程序中使用Reachability,首先要完成如下两部:
    
    1.1.添加源文件:
    在你的程序中使用Reachability 只须将该例程中的 Reachability.h 和 Reachability.m拷贝到你的工程中。如下图:

    
    
   1.2.添加framework:
   将SystemConfiguration.framework 添加进工程。如下图:
    
    
    2.网络状态
    
   Reachability.h中定义了三种网络状态:
    typedef enum{
       NotReachable =0,           //无连接
       ReachableViaWiFi,           //使用3G/GPRS网络
       ReachableViaWWAN           //使用WiFi网络
    }NetworkStatus;
    
   因此可以这样检查网络状态:

    Reachability*r = [ReachabilityreachabilityWithHostName:@“www.apple.com”];
    switch ([rcurrentReachabilityStatus]) {
           case NotReachable:
                   // 没有网络连接
                   break;
           case ReachableViaWWAN:
                   // 使用3G网络
                   break;
           case ReachableViaWiFi:
                   // 使用WiFi网络
                   break;
    }
    
   3.检查当前网络环境
   程序启动时,如果想检测可用的网络环境,可以像这样
    //是否wifi
    + (BOOL)IsEnableWIFI {
       return ([[Reachability reachabilityForLocalWiFi]currentReachabilityStatus] != NotReachable);
    }

    //是否3G
    + (BOOL)IsEnable3G {
       return ([[Reachability reachabilityForInternetConnection]currentReachabilityStatus] != NotReachable);
    }
    例子:
    -(void)viewWillAppear:(BOOL)animated{    
    if(([ReachabilityreachabilityForInternetConnection].currentReachabilityStatus ==NotReachable) && 
           ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus== NotReachable)) {
           self.navigationItem.hidesBackButton = YES;
           [self.navigationItem setLeftBarButtonItem:nil animated:NO];
       }
    }

    4.链接状态的实时通知
   网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户:
    
    Reachability1.5版本
    //My.AppDelegate.h
    #import"Reachability.h"

    @interfaceMyAppDelegate : NSObject {
       NetworkStatus remoteHostStatus;
    }

    @propertyNetworkStatus remoteHostStatus;

    @end

    //My.AppDelegate.m
    #import"MyAppDelegate.h"

   @implementation MyAppDelegate
    @synthesizeremoteHostStatus;

    //更新网络状态
    -(void)updateStatus {
       self.remoteHostStatus = [[Reachability sharedReachability]remoteHostStatus];
    }

    //通知网络状态
    -(void)reachabilityChanged:(NSNotification *)note {
       [self updateStatus];
       if (self.remoteHostStatus == NotReachable) {
           UIAlertView *alert = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"AppName", nil)
                        message:NSLocalizedString (@"NotReachable", nil)
                       delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
           [alert show];
           [alert release];
       }
    }

    //程序启动器,启动网络监视
    -(void)applicationDidFinishLaunching:(UIApplication *)application{
    
       // 设置网络检测的站点
       [[Reachability sharedReachability]setHostName:@"www.apple.com"];
       [[Reachability sharedReachability]setNetworkStatusNotificationsEnabled:YES];
       // 设置网络状态变化时的通知函数
       [[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(reachabilityChanged:)
                                                name:@"kNetworkReachabilityChangedNotification" object:nil];
       [self updateStatus];
    }

    -(void)dealloc {
       // 删除通知对象
       [[NSNotificationCenter defaultCenter] removeObserver:self];
       [window release];
       [super dealloc];
   
    
    Reachability2.0版本
    

    //MyAppDelegate.h
    @classReachability;

       @interface MyAppDelegate : NSObject {
           Reachability  *hostReach;
       }

    @end

    //MyAppDelegate.m
    -(void)reachabilityChanged:(NSNotification *)note {
       Reachability* curReach = [note object];
       NSParameterAssert([curReach isKindOfClass: [Reachabilityclass]]);
       NetworkStatus status = [curReach currentReachabilityStatus];
    
       if (status == NotReachable) {
           UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"AppName""
                             message:@"NotReachable"
                             delegate:nil
                             cancelButtonTitle:@"YES" otherButtonTitles:nil];
                             [alert show];
                             [alert release];
       }
    }
                              
    -(void)applicationDidFinishLaunching:(UIApplication *)application{
       // ...
                  
       // 监测网络情况
       [[NSNotificationCenter defaultCenter] addObserver:self
                             selector:@selector(reachabilityChanged:)
                             name: kReachabilityChangedNotification
                             object: nil];
       hostReach = [[ReachabilityreachabilityWithHostName:@"www.google.com"] retain];
       hostReach startNotifer];
       // ...
    }

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子做题不动脑不会转弯怎么办? 孩子做题总是马虎怎么办 孩子做题总是眼高手低怎么办 小孩说幼儿园老师不喜欢他怎么办 初中学生了不喜欢读书怎么办 小孩吐怎么办给揉哪里 8岁了不爱写字怎么办呢 8岁了不会写字怎么办呢 高考做题时犯各种粗心错误怎么办 孩子做题不认真读题怎么办 孩子不爱学习怎么办有什么办法 小孩字写的不好怎么办 孩子的字写得丑怎么办 一年级孩子生字默不出来怎么办 5岁宝宝不爱写字怎么办 三年级小孩不自觉做作业怎么办 一年级的孩子不爱写字怎么办 一年级孩子不爱写作业怎么办 一年级的小孩不爱写字怎么办 小孩儿写字做作业磨蹭怎么办 孩子不学习成绩差不写作业怎么办 儿童4岁不会写字怎么办 小孩读中班还不会写字怎么办 幼儿园中班孩子不写字怎么办 小孩吃多了呕吐怎么办 一岁宝宝老便秘怎么办 4周岁半幼儿便秘怎么办 没胃口不能吃辣怎么办 九个月宝宝缺锌怎么办 宝宝4 5天不吃饭怎么办 16个月宝宝不肯吃饭怎么办 儿童不吃饭很瘦怎么办 小孩吃饭吃的少怎么办 宝宝突然晚上不睡觉怎么办 l岁宝宝吃多了怎么办 3个月婴儿厌食怎么办 11个月婴儿厌食怎么办 7个月的婴儿厌食怎么办 小孩记忆不好读书记不住怎么办 9岁儿童不爱睡觉怎么办 6岁儿童不爱吃饭怎么办