首页 > 解决方案 > AFNetworkReachabilityManager:如果我设置 setReachabilityChangeBlock 两次或更多次会发生什么?

问题描述

我通过两种不同的方法设置它:

[[AFNetworkReachabilityManager sharedManager] startMonitoring];
                [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
                    if(status == AFNetworkReachabilityStatusNotReachable ||
                       status == AFNetworkReachabilityStatusUnknown){
                        self.liveTimesBar.hidden = YES;

                        //In case we regain connection
                        [[AFNetworkReachabilityManager sharedManager] startMonitoring];
                        [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
                            if(status == AFNetworkReachabilityStatusReachableViaWWAN ||
                               status == AFNetworkReachabilityStatusReachableViaWiFi){
                                [self extractedRelevantFlightNumbers];
                            }
                        }];
                    }
                }];

所以我的想法是,当我们失去互联网时,这个 liveTimesBar 会被隐藏。但同时注册通知,如果我们再次恢复互联网。我用两种不同的方法来处理不同的东西。

所以我的问题:

  1. 如果这些块之一被执行,那么它是“完成”还是如果发生此事件会再次执行?或者它只是为一个连接更改设置?

  2. 如果我从两种不同的方法注册此通知,它们都会执行吗?

标签: objective-cobjective-c-blocks

解决方案


共享管理器是指一个单例实例,除非setReachabilityStatusChangeBlock将代码块推送到某个数组中,并且在调用时迭代数组并调用每个存储的块(情况并非如此)。块将存储在一个变量中,并且像所有变量一样,它将保存最后一次更新。所以你可以放心地期待你通过的最新块被调用。


推荐阅读