我正在开发使用网络的iPhone应用程序。 iPhone通过HTTP请求与我的服务器通信,并且可以在WiFi和3G上运行。
我目前使用NSURLConnection initWithRequest
向我的服务器发送异步请求并获取响应(但我很快将开始使用ASIHTTPRequest
库)
我了解,对于这类应用程序(需要互联网连接的应用程序),我应该(必须?)使用可达性。
在网上搜索并查看了Apple的可达性示例代码后,我仍然不了解一些基本知识:
可达性的主要目的是什么?
在苹果公司的示例中,他们检测到主机,WiFi和3G的网络问题,并向用户显示适当的消息。
这是向用户显示消息的可到达性的主要目的吗?
还是我需要将其用于其他更实际的情况?例如,如果NSURLConnaction
请求失败,是否需要以某种方式使用可达性来重新发送请求?
可达性的正确用法是什么?
在启动应用程序时仅使用一个实例,然后侦听网络更改是否很常见?还是应该在每次网络请求之前检查自己的可达性状态?
使用reachabilityWithHostName
是否足够?还是需要reachabilityForLocalWiFi
和reachabilityForInternetConnection
吗?
还有另一件事,我知道苹果可以拒绝使用网络且不使用可达性的应用程序。
我应该实现哪些方法“必须”?
仅通知用户当前没有互联网就足够了吗?
最佳答案
Reachability
是网络助手实用程序类,它用于获取有关连接状态的各种信息
可达性用于查询网络状态,并注册您的侦听器以在连接更改时获得通知。
否,它的主要用途是测试是否存在Internet连接,或者在连接更改时获得通知
是的,您可以使用它。例如,我通常在项目中执行的操作是将所有已发出的请求保存到远程服务器。
假设我要下载10个文件。当任何文件由于没有Internet连接而导致下载过程失败时,我会将它们保存到一系列失败的下载中。
然后,当“可达性”通知我Internet连接已恢复时,我将遍历此阵列并再次开始下载过程。
这取决于您的模式和需求。
是的,那是我要做的。在我的项目中,我只有1个下载管理器类的实例,并且该类具有唯一的Reachability实例。
您可以做到这一点,而无需多个Reachability类实例。我通常要做的是在下载管理器中建立一个方法,该方法告诉我是否存在连接。
我不确定这一点,但是我通常要做的是以所有方式测试连接性。我没有区分3G或WiFi,但是在某些实现中,此信息(WiFi或3G)可能会有用。