AFNetworkReachabilityManager:如果将setReachabilityChangeBlock设置两次或更多次会发生什么?

时间:2019-04-23 04:18:28

标签: objective-c objective-c-blocks

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

[[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. 如果我通过两种不同的方法注册此通知,它们是否都将执行?

1 个答案:

答案 0 :(得分:1)

Shared Manager引用一个单例实例,除非setReachabilityStatusChangeBlock将代码块推送到某个数组中,并且在调用时在数组上迭代并调用每个存储的块(情况并非如此)。块将存储在一个变量中,并且像所有变量一样,它将保存最近的更新。 因此,您可以放心地期待已通过的最新区块被调用。