回调:在一处声明和定义,有调用权限。在另一处实现,无调用权限。

关于将block做为方法的参数进行传递:

给出了block的实现内容。

1.发送消息queryContactOlineStatusResult

2.此时指针进入方法queryContactOlineStatusResult:内部,此时不需理会做为参数出现的block的实现部分,完全无视它就好,可以将他们看做参数A  ,仅此而已。(只是恰好在此处实现而已,与此时的上下文语境没有半点关系)然后执行方法queryContactOlineStatusResult(A)的方法体。

[[ContactManager defaultManager] queryContactOlineStatusResult:^(NSMutableArray *resultArray, NSMutableDictionary *resultDictionary) { //实现
        _onlineStatusDic.dictionary = [NSDictionary dictionaryWithDictionary:resultDictionary];
        if (weakSelf.dataArray.count) {
            [weakSelf reloadTable];
        } else {
            [weakSelf autoTriggerHeaderRefresh];
        }

}// 在此处的block仅为实现部分,整体的实现作为一个参数,并不会在此处执行block。

];

好了,回调出现于此,方法体中终于出现了你:

“result(_onlineStatusArray, _onlineStatusDictionary);”需要执行的block!!

此时回调(可认为是系统实现的回调动作)之前的block实现!进行运算

//此时给出了参数A的实际名称为result。

- (void)queryContactOlineStatusResult:(void (^)(NSMutableArray *, NSMutableDictionary *))result  //定义
{
    if (_onlineStatusArray && _onlineStatusDictionary) {
        if (result) {
            result(_onlineStatusArray, _onlineStatusDictionary);                 //回调上述block的实现部分,在此处执行,对_onlineStatusDic.dictionary进行赋值。然后[weakSelf reloadTable]加载table,,或重新请求[weakSelf autoTriggerHeaderRefresh]。然后回调完成。
        }
    } else {
        NSMutableArray *resultArray = [NSMutableArray array];
        NSMutableDictionary *resultDictionary = [NSMutableDictionary dictionary];
        NSString *originFilePath = [[NSBundle mainBundle] pathForResource:@"OnlineStatus" ofType:@"plist"];
        NSArray *originArray = [[NSArray alloc] initWithContentsOfFile:originFilePath];
        for (NSDictionary *itemDic in originArray) {
            LXOnlineState *tempModel = [[LXOnlineState alloc] init];
            tempModel.name    = [itemDic valueForKey:@"name"];
            tempModel.icon    = [itemDic valueForKey:@"icon"];
            tempModel.stateID = [itemDic valueForKey:@"state"];
            [resultArray addObject:tempModel];
            [resultDictionary setValue:tempModel forKey:tempModel.stateID];
        }
        _onlineStatusArray = [NSMutableArray arrayWithArray:resultArray];
        _onlineStatusDictionary = [NSMutableDictionary dictionaryWithDictionary:resultDictionary];
        if (result) {
            result(_onlineStatusArray, _onlineStatusDictionary);
        }
    }
}

转一篇:http://www.cnblogs.com/ygm900/p/3633131.html (简单、粗暴、易懂)

               对Block回调机制进行改写,让她还原成函数调用最本质的样子

1.声明并创建block

  void(^callBack)(NSMutableArray *, NSMutableDictionary *);

  callBack = ^(NSMutableArray * resultArray, NSMutableDictionary * resultDictionary)

        {

          _onlineStatusDic.dictionary = [NSDictionary dictionaryWithDictionary:resultDictionary];
                if (weakSelf.dataArray.count) {
                         [weakSelf reloadTable];
                } else {
                         [weakSelf autoTriggerHeaderRefresh];
                    }

              

       };

2.发送消息

[ [ContactManager defaultManager] queryContactOlineStatusResult:callBack];

3.方法实现:

- (void)queryContactOlineStatusResult:callBack //形参

{
    if (_onlineStatusArray && _onlineStatusDictionary) {
        if (callBack) {
            callBack(_onlineStatusArray, _onlineStatusDictionary);
        }
    } else {
        NSMutableArray *resultArray = [NSMutableArray array];
        NSMutableDictionary *resultDictionary = [NSMutableDictionary dictionary];
        NSString *originFilePath = [[NSBundle mainBundle] pathForResource:@"OnlineStatus" ofType:@"plist"];
        NSArray *originArray = [[NSArray alloc] initWithContentsOfFile:originFilePath];
        for (NSDictionary *itemDic in originArray) {
            LXOnlineState *tempModel = [[LXOnlineState alloc] init];
            tempModel.name    = [itemDic valueForKey:@"name"];
            tempModel.icon    = [itemDic valueForKey:@"icon"];
            tempModel.stateID = [itemDic valueForKey:@"state"];
            [resultArray addObject:tempModel];
            [resultDictionary setValue:tempModel forKey:tempModel.stateID];
        }
        _onlineStatusArray = [NSMutableArray arrayWithArray:resultArray];
        _onlineStatusDictionary = [NSMutableDictionary dictionaryWithDictionary:resultDictionary];
        if (callBack) {
            callBack(_onlineStatusArray, _onlineStatusDictionary);
        }
    }
}

转载于:https://www.cnblogs.com/liuziyu/p/4169835.html

第一篇献给你:Block的回调相关推荐

  1. 第一篇 献给一次线上100%CPU

    2019独角兽企业重金招聘Python工程师标准>>> 9点上班发现nginx线上服务器异常,ssh登录不进去,控制平台显示cpu上升到100%. 1.在登录异常的情况下为保证线上系 ...

  2. 开园第一篇献给找不回来的园子。。

    阿门. 转载于:https://www.cnblogs.com/FelixChengOrz/p/3302829.html

  3. b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释

    b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释 继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更 ...

  4. 国际化困境(第一篇)

    (和我前一篇文章一样,这篇文章也需要读者动手写些程序,参与其中,实验过程可能需要反复重启电脑,另外最好准备一套英文Windows系统,哦,如果再有一套Windows Vista英文版,那再好不过,总之 ...

  5. html仿qq最小化怎么实现,JS仿QQ好友列表展开、收缩功能(第一篇)

    JS仿QQ好友列表展开.收缩功能(第一篇) 发布时间:2020-10-17 14:20:03 来源:脚本之家 阅读:96 作者:erdouzhang 效果图如下所示: html: 我的好友 张三 李四 ...

  6. .net开发笔记(十三) Winform常用开发模式第一篇

    上一篇博客最后我提到"异步编程模型"(APM),之后本来打算整理一下这方面的材料然后总结一下写篇文章与诸位分享,后来在整理的过程中不断的延伸不断地扩展,发现完全偏离了"异 ...

  7. Android开源框架Afinal第一篇——揭开圣女的面纱

    Android开源框架Afinal第一篇--揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在 ...

  8. 谨以此篇献给即将奔三十的人们

    谨以此篇献给即将奔三十的人们 二十岁和三十岁 三十岁的女人会怎么样? 二十岁的时候 三十岁的时候 我穿着一条背心式牛仔裙在校园里走来走去,一说话就脸红. 我穿着名牌套装,坐在办公桌前,满脸冷酷地对下属 ...

  9. SoC第一讲——Vivado的Block Design 的使用

    SoC第一讲--Vivado的Block Design 的使用 前言 近期刚接触SoC的学习,通过Xilinx的Vivado软件和ZYNQ系列的器件芯片学习SOC,特此在学习的过程中做些总结,以帮助自 ...

最新文章

  1. 关于Dreamweaver乱码问题的解决方案
  2. 通过OpenSSL的接口实现Base64编解码
  3. 赛道公布之后,让我们一起DISS组委会
  4. MPLS 解决方案有哪些优势?——Vecloud
  5. Servlet程序自动加载
  6. 判断一个路径串是否为有效目录
  7. Android按键响应的几种方式、安卓页面的跳转、页面跳转传参、页面自动跳转、Activity(页面)的生命周期
  8. 数据结构实验 5.二叉树深度
  9. as3 Box2d Hello box2d
  10. KB和kB,MB和mb,详细解释计算机存储单位
  11. windows 无法对计算机进行启动到,windows无法启动无法启动怎么办,windows无法启动的9种解决方法...
  12. matlab导线平差程序,【求助】闭合导线简易平差Matlab代码需要大神帮忙
  13. 用python打印几种三角形的排列
  14. 河南大学2019计算机专业录取分数线,2019河南大学本科录取分数线(含历年录取分数线)...
  15. EBS 打印机设置——PASTA
  16. Pywinauto 中文文档
  17. Python爬虫学习(八)识别12306的验证码信息
  18. 连续创造OTT赛道新神话,论酷开科技的持久力
  19. 海康威视Android开发 视频下载以及转码
  20. python代码库能干什么_一行Python代码能做什么?

热门文章

  1. 2023工厂做外贸有哪些注意点?
  2. 关于js不生效的问题
  3. Puppet快速入门!
  4. 电力煤矿跑冒滴漏监测
  5. anacnda软件打不开解决方法
  6. java设定时间实现倒计时_Java 获取当前时间及实现时间倒计时功能【推荐】
  7. 【一小时带你学会HTML,知识点总结】
  8. 易度项目管理系统试用
  9. 1-L-edit16.3基本操作教程-操作不断更新中
  10. 计算机一级簇型水平统计图,2017计算机一级MSOffice操作题练习附答案(2)