互联网连接可用后做某事的最佳方法

Posted

技术标签:

【中文标题】互联网连接可用后做某事的最佳方法【英文标题】:Best approach to doing something once an Internet connection becomes available 【发布时间】:2013-07-13 15:29:48 【问题描述】:

我在这里看到了很多关于如何检查互联网连接可用的示例,但似乎没有人解释做某事的最佳实践方式/如果它可用。

我正在使用 Tony Million 的 Reachability 类,并且有一个“可用连接”块,一旦连接可用,它就会将布尔值(在线)设置为 true。 Reachability 类在我的应用程序委托 didFinishLaunchingWithOptions 中初始化,但是当我的代码检查 Online Reachability 的状态时,仍然没有完成确定是否存在连接,因此我的应用程序在首次启动时始终认为自己处于脱机状态。

现在,我可以将需要连接的代码放入“可用连接”块中,但我的应用需要连接互联网的地方不止一个,因此这显然不够灵活,无法满足我的需求。

到目前为止,我的“最佳”想法是使用需要 Internet 来完成工作的方法填充数组,然后让 Reachability 在知道有连接后执行该数组中的任何内容...但是我结束了-这里的问题复杂化了?有没有更好的方法来解决这个问题?

【问题讨论】:

【参考方案1】:

这大致基于您的“最佳想法”。当互联网连接发生变化时,Tony Million 的 Reachability 还会通过NSNotificationCenter 发布通知。当互联网连接可用时,所有需要做某事的班级都应该注册此通知。

在 GitHub 页面上有一个例子:https://github.com/tonymillion/Reachability#another-simple-example

您将在您的应用委托中初始化 Reachability 类,就像您现在所做的那样。然后您的其他类在其初始化程序中使用NSNotificationCenter 注册kReachabilityChangedNotification 通知。他们还必须在他们的 dealloc 方法中从 NSNotificationCenter 注销。

这里有一些你可以作为起点的代码:

- (void)registerForReachabilityNotification

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name:kReachabilityChangedNotification
                                               object:nil];


- (void)deregisterFromNotifications

    [[NSNotificationCenter defaultCenter] removeObserver:self];


- (void)reachabilityChanged:(NSNotification *)notification

    Reachability *reachability = notification.object;
    switch ([reachability currentReachabilityStatus]) 
        case NotReachable:
            // No connection
            break;
        case ReachableViaWiFi:
        case ReachableViaWWAN:
            // Connection available
            break;
    

【讨论】:

很好-感谢您的建议。所以,大概,如果方法 X 需要做一些互联网性的事情,我会在我的 viewdidload 中注册它,然后在方法 X 的末尾我让它自己注销? 这取决于...如果您只需要做一次互联网的事情,您应该在互联网请求成功后取消注册。但是,如果您需要在连接更改时执行某些操作,则不应取消注册。

以上是关于互联网连接可用后做某事的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

互联网连接[重复]

Android Shaking 在 3 秒后做某事

效果完成后做某事

中培专家 现场讲述 互联网大型高可用高并发微服务架构设计与最佳实践

如何在 jQuery 中发生事件后做某事?

使用 iOS SDK 检查 Internet 连接 [重复]