我们使用AFN监听网络变化.创建一个单例AFToolsManager 隔离第三方.以便日后更换第三方不影响已经写好的代码.此时需要该单例监听网络.一对多的传递网络状态.此处想的最多的肯定是通知
但是通知创建相对麻烦且代码分散.还需要销毁.所以想做一个block回调.实现一对多.
废话少说:
.思路:使用数组保存多个block属性
//网络状态回调block typedef void(^ReachabilityBlock)(AFNetworkReachabilityStatus status);
/* block 回调数组 */ @property (nonatomic,strong) NSMutableArray *reachabilityBlockArray;
- (NSMutableArray *) reachabilityBlockArray { if (!_ reachabilityBlockArray) { _ reachabilityBlockArray = [NSMutableArray array]; } return _ reachabilityBlockArray; }
.监听网络变化
#私有方法
- (void)getNetworkReachabilityStatus:(ReachabilityBlock)statusBlock; { AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; __weak typeof(self) weakSelf = self; [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { for (ReachabilityBlock staBlock in weakSelf.reachabilityBlockArray) { staBlock(status); } }]; [manager startMonitoring]; _reachable = manager.reachable; }
.控制器统一使用
[[AFToolsManager shareManager].reachabilityBlockArray addObject:^(AFNetworkReachabilityStatus status) { if (status == AFNetworkReachabilityStatusUnknown ||status == AFNetworkReachabilityStatusNotReachable) { NSLog(@"网络异常"); } else if (status == AFNetworkReachabilityStatusReachableViaWWAN) { NSLog(@"使用手机流量"); } else if (status == AFNetworkReachabilityStatusReachableViaWiFi) { NSLog(@"使用wifi"); } else { NSLog(@"网络不正常"); } }];
此思路应该可以适用于换肤换字体.
网友评论