开源中国iOS客户端学习——(六)网络连接检测

简介:

      开源中国iOS客户端基于网络同步数据,从而达到与网页看到同样数据效果,所以在启动程序的时候需要检查网络;这也是每一个联网应用启动的第一步,如果联网应用没有检查网络,苹果公司将不予以审核通过;

       开源中国iOS客户端大牛们在写网络检测时很迷惑人,开始以为他们用的是ASI类库做的网络检测,今天才看明白,他们并不是用的ASI类库检测,而是用到AFNetworking这个类库里一个实例方法做网络连接检测;


先看Appdelegate文件:

在application:didFinishLaunchingWithOptions:方法里

//检查网络是否存在 如果不存在 则弹出提示     [Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];

在applicationDidBecomeActive:方法里

- (void)applicationDidBecomeActive:(UIApplication *)application {          [Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];     if ([Config Instance].isNetworkRunning == NO) {         UIAlertView *myalert = [[UIAlertView alloc] initWithTitle:@"警告" message:@"未连接网络,将使用离线模式" delegate:self cancelButtonTitle:@"确认" otherButtonTitles:nil,nil]; 		[myalert show];     } }

都用到了[Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];再看看Config和CheckNetwork这两个类定义

Config类的Instance方法,

static Config * instance = nil; +(Config *) Instance {     @synchronized(self)     {         if(nil == instance)         {             [self new];         }     }     return instance; }
从字面意思也能推测出是给Cinfig类实例化用的,isNetworkRunning是BOOL型变量

CheckNetwork在ASIHttp文件里,和ASI类库放到一块的,(里面汉字出现乱码)

+(BOOL)isExistenceNetwork { //	BOOL isExistenceNetwork; //	Reachability *r = [Reachability reachabilityWithHostName:@"www.oschina.net"]; //    switch ([r currentReachabilityStatus]) { //        case NotReachable: //			isExistenceNetwork=FALSE; //            //   NSLog(@"娌℃湁缃戠粶"); //            break; //        case ReachableViaWWAN: //			isExistenceNetwork=TRUE; //            //   NSLog(@"姝e湪浣跨敤3G缃戠粶"); //            break; //        case ReachableViaWiFi: //			isExistenceNetwork=TRUE; //            //  NSLog(@"姝e湪浣跨敤wifi缃戠粶");         //            break; //    } //	return isExistenceNetwork;          return YES; } 
本来是使用苹果官方提供的Reachability来检测网络连接状况,但是大牛们又给注释掉了,return YES;

也就是[Config Instance].isNetworkRunning=YES;

但是当我把iMac网线拔掉运行的时候却能检测出网络无连接,通过查找 “错误 网络无连接”

  

发现他们都在AFNetworking类库

- (void)postPath:(NSString *)path parameters:(NSDictionary *)parameters success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure  方法里面,

这个方法使用AFHTTPRequestOperation和“PATCH”请求HTTP客户端操作队列,使用到了block块(iOS 4.0+特性),URL请求成功执行success块里操作,这里面block块没有返回值,接受两个参数,创建请求操作和响应数据请求,URL请求失败执行failure里面的方法,这个block块里仍没有返回值,接受两个参数创建请求操作和NSError对象,描述网络或解析错误状况;

所以才有了上面截图中网络的连接检测,拿源码中一处来举例




正在学习过程中,错误之处请指正,欢迎交流,共同学习;

欢迎转载分享,请注明出处http://blog.csdn.net/duxinfeng2010




     本文转自新风作浪 51CTO博客,原文链接:http://blog.51cto.com/duxinfeng/1208687,如需转载请自行联系原作者





相关文章
|
6月前
|
Linux Android开发 iOS开发
基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
91 0
|
3月前
|
监控 API iOS开发
克魔助手 - iOS性能检测平台
众所周知,如今的用户变得越来越关心app的体验,开发者必须关注应用性能所带来的用户流失问题。目前危害较大的性能问题主要有:闪退、卡顿、发热、耗电快、网络劫持等,但是做过iOS开发的人都知道,在开发过程中我们没有一个很直观的工具可以实时的知道开发者写出来的代码会不会造成性能问题,虽然Xcode里提供了耗电量检测、内存泄漏检测等工具,但是这些工具使用效果并不理想(如Leak无法发现循环引用造成的内存泄漏)。所以这篇文章主要是介绍一款实时监控app各项性能指标的工具,包括CPU占用率、内存使用量、内存泄漏、FPS、卡顿检测,并且会分析造成这些性能问题的原因。
|
6月前
|
安全 前端开发 Android开发
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
鸿蒙开发学习是一项探索性的工作,旨在开发一个全场景分布式操作系统,覆盖所有设备,让消费者能够更方便、更直观地使用各种设备。
301 6
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
|
8月前
|
iOS开发
iOS UIKit Dynamics Demo 学习地址列表
iOS UIKit Dynamics Demo 学习地址列表
23 0
|
8月前
|
iOS开发
iOS UIDevice & 屏幕旋转检测
iOS UIDevice & 屏幕旋转检测
31 0
|
9月前
|
API 开发工具 iOS开发
一点就通,社交源码IOS客户端开发集成SDK
所谓SDK,全称是SoftwaredevelopmentKit,翻译成软件开发工具包。SDK用助开发某种软件,今天给大家简单讲解下如何在社交源码IOS客户端上开发集成 SDK。
|
9月前
|
存储 网络安全 数据安全/隐私保护
iOS 逆向编程(八)远程拷贝 - 客户端(电脑)通过 ssh 拷贝文件到服务端(手机)
iOS 逆向编程(八)远程拷贝 - 客户端(电脑)通过 ssh 拷贝文件到服务端(手机)
99 0
|
9月前
|
存储 网络安全 数据安全/隐私保护
iOS 逆向编程(七)客户端(手机)免密认证登录
iOS 逆向编程(七)客户端(手机)免密认证登录
102 0
|
10月前
|
Android开发 iOS开发 Windows
无影产品动态|iOS & Android客户端6.0.0版本发布,提升触控灵敏度,操作体验更丝滑
无影ios & Android客户端6.0.0版本发布!移动端触控体验更舒适,用户操作更便捷,一起来看看!
689 0
无影产品动态|iOS & Android客户端6.0.0版本发布,提升触控灵敏度,操作体验更丝滑
|
10月前
|
存储 iOS开发
iOS主线程耗时检测方案
找出那个拖后腿的凶手
144 1
iOS主线程耗时检测方案