Jac*_*ies 26 iphone ipod objective-c ipad ios
使用Reachability比下面的代码有什么好处?我觉得Reachability有很多代码,但如果它以任何方式更好,那么我会用它代替.
NSString *connectionString = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
if ([connectionString length] == 0) {
//No connection
}
Run Code Online (Sandbox Code Playgroud)
现在被授予,如果谷歌曾经失败,那么这将不起作用.但实际上没有机会发生这种情况.你怎么看?谢谢!
lxt*_*lxt 45
这实际上是一个非常好的问题 - 我在公司招聘时在iOS开发人员访谈中实际使用它是如此之好:
为什么Apple的可达性示例数百行,当您只需使用一行来检查URL是否响应时?
首先,网络可达性实际上非常非常复杂.它不仅仅是测试URL.想想以下示例:
用户使用3G,但已用完了数据限额,因此每个请求都会重定向到运营商的网站.
用户连接到需要身份验证/登录的公共WiFi网络,因此请求会重定向到登录页面
最后一个例子非常普遍 - 它一直在发生.但是,如果你使用initWithContentsOfURL你的应用程序会想象你有连接,而事实上你没有:你只需要返回网络重定向你的页面内容.
这就是为什么Apple的代码比你最初想象的要复杂得多的原因之一.您不应该只是问"我可以访问此URL",而是"从此URL返回的数据是我期望的 ".
但这真的只是冰山一角.除此之外,可达性还有很多 - 例如,我可能有一个需要下载大量信息的应用程序,比如50MB.如果用户在未经他们同意的情况下使用3G连接,那么简单地下载50MB数据将是一个坏主意 - 特别是如果他们正在漫游,或者是在受限制的数据计划上.因此,Reachability还会告诉您用户所处的连接类型:EDGE,3G,WiFi等(*注意:请参阅下面的注释,这可能不是最好的建议).
Reachability中的ReadMe.txt将告诉您更多关于代码可以做什么和不可以做什么的内容.
不幸的是,网上有太多人没有意识到有很多日常场景initWithContentsOfURL会返回有效的响应,但用户将无法连接.[博客这样的帖子] [1]在Google中被编入索引,人们认为它是可接受的替代品:它不是!
我在招聘时提出这个问题的原因之一是,它可以显示开发人员不只是在盒子里思考 - 就像你和许多其他开发人员一样,当我看到Reachability示例代码时我的第一反应是"哇,这看起来太复杂了对于非常简单的事情".但希望这个答案会在某种程度上说服你.
编辑:绝对注意下面史蒂文的评论.他提出了我的答案没有考虑的一些要点(即MiFi热点),并提出了一个有效的案例,即Reachability不一定是编码天堂代码的顶峰.在许多情况下,开发人员将使用自己的改进等修改可达性.
Ste*_*her 29
可达性的最大问题不在于它是错误的代码,还是使用不好的代码.它现在实际上是相当不错的代码.但是,为了一个无意的目的,误解和误用是很容易的代码.
以下是使用可达性的一些指导原则:
您可以在Mobile Safari中看到此行为.如果页面加载失败,无论iPhone是否认为您有连接,您都可以重试.如果网络可用且Mobile Safari注意到,它将自动重试.感觉真的很自然.
请记住以下准则:
有几个关于移动网络的WWDC 2011会议值得关注.(2010年有几个也解决了这个问题,我相信WWDC 2012会有几个.这不是一个简单的问题,它不会消失.)
另外:initWithContentsOfURL是同步的.不要在iOS上使用同步网络.如果需要很长时间,iOS应用程序将退出您的应用程序.
| 归档时间: |
|
| 查看次数: |
3455 次 |
| 最近记录: |