美文网首页iOS开发.iOS Developer
block的1对多使用.(更改主题/网络切换)

block的1对多使用.(更改主题/网络切换)

作者: 侭情显現 | 来源:发表于2017-05-17 10:35 被阅读18次

    我们使用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(@"网络不正常"); } }];

    此思路应该可以适用于换肤换字体.

    相关文章

      网友评论

        本文标题:block的1对多使用.(更改主题/网络切换)

        本文链接:https://www.haomeiwen.com/subject/ysxdxxtx.html