如何使用iOS Reachability

Eya*_*yal 35 iphone objective-c nsurlconnection reachability ios

我正在开发一个使用网络的iPhone应用程序.iPhone通过HTTP请求与我的服务器通信,应该可以在WiFi和3G上运行.
我目前NSURLConnection initWithRequest用来向我的服务器发送异步请求并获得响应(但我很快就会开始使用ASIHTTPRequest库)

我明白,对于这种应用程序(需要互联网连接的应用程序),我应该(必须?)使用Reachability.

在搜索网页并查看Apple的Reachability示例代码后,我仍然不了解一些基本内容:

可达性的主要目的是什么?

在Apple的示例中,他们检测到主机,WiFi和3G的网络问题,并向用户显示适当的消息.
这是Reachability的主要目的,向用户显示消息吗?或者我是否需要将其用于其他更实际的场景?例如,如果NSURLConnaction请求失败,我是否需要以某种方式使用Reachability重新发送请求?

可达性的正确使用是什么?

在应用启动时只使用一个实例,然后收听网络更改是否常见?或者我应该在每次网络请求之前检查自己的可达性状态?
是否足以使用reachabilityWithHostName或者我也需要reachabilityForLocalWiFireachabilityForInternetConnection

还有一件事,我理解苹果可以拒绝使用网络但不使用可达性的应用程序.我应该实施
哪些" 必须 "的方法?
仅通知用户目前没有互联网是否足够?

Oma*_*ith 47

Reachability 是一个网络助手实用程序类,它用于获取有关连接状态的各种信息

可达性的主要目的是什么?

  • 可达性用于查询网络状态
  • 并注册您的听众,以便在连接发生变化时获得通知

这是Reachability的主要目的,向用户显示消息吗?

当然,它的主要用途是测试是否存在互联网连接,或者在连接发生变化时获得通知

例如,如果NSURLConnaction请求失败,我是否需要以某种方式使用Reachability重新发送请求?

是的你可以使用它,例如我通常在我的项目中做的是保存已经对远程服务器发出的所有请求,假设我想下载10个文件,

当任何文件由于没有互联网连接而导致下载过程失败时,我将它们保存到一系列失败的下载,

当可达性通知我已恢复互联网连接时,我遍历此阵列并再次开始下载过程

可达性的正确使用是什么?

这取决于您的模式和需求.

在应用启动时只使用一个实例,然后收听网络更改是否常见?

是的,这就是我做的,在我的项目中我只有一个下载管理器类的实例,并且这个类有唯一的活动实例可达性

或者我应该在每次网络请求之前检查自己的可达性状态?

你可以这样做而不需要多个Reachability类实例,我通常做的是在我的下载管理器中有一个方法,告诉我如果有连接则使用Reachability.

是否足以使用reachabilityWithHostName或者是否还需要reachabilityForLocalWiFi和reachabilityForInternetConnection?

我不确定这个,但我通常做的是测试所有手段的连接,我不区分3g或wifi,但有一些实现这个信息(wifi或3g)可能是有用的


And*_*eas 12

可达性是Apple所做的一个示例项目.人们将其用作SystemConfiguration框架上的API.正如您已经看到的那样,有一些方法可以检查主机是否可以访问等等.

我使用Reachabilty项目的方法是,我创建了一个带有类方法的类,如果我请求数据的主机可用,则返回一个布尔值.如果是,那么方法返回YES,如果不是,则返回NO(显然).

现在,在我正在使用连接的应用程序中,您需要/应该检查是否可以像Apple文档所述启动连接.我有一个简单的if,然后显示一个适当的警报消息,该请求目前无法完成.

如果第一次无法执行请求,则无需再次自动尝试.这样做的主要目的是使您的应用程序远离崩溃,同时向用户发出无法完成的消息.

我自己不使用通知,但这是因为我不想监视是否可以进行连接.这是您必须根据应用程序需求决定的.

您不必使用Reachablitiy类中的所有方法,只需使用其中一个方法即可.记录了不同方法提供的内容以及何时在头文件中使用它们.

请记住包含SystemConfiguration框架.