美文网首页
对 block(回调函数) 的一点理解

对 block(回调函数) 的一点理解

作者: 魔君001 | 来源:发表于2019-05-16 14:43 被阅读0次

    注:工作中的一点总结


    • 简化block 定义,以便更加方便的使用
      typedef int(^MyBlock)(int, int);

    • block 的简单使用
      1 作为属性使用
      @property (nonatomic,copy)MyBlock block;
      2 我们开发中用到的最多就是传值
      例:假如我们有一个这样需求:A push 到 B 页面,我们需要B页面返回 A 页面时,修改A页面的背景色,或者一些其他的操作。

      实现方法

      我们在 B页面声明一个block,作为参数
      @property (nonatomic, copy) void(^colorBlock)(UIColor *color);
      注:站在 c 语言的角度看block ,其实block 本质就是一个匿名函数,这里使我们有时候经常忽略的一点,导致自己定义的block出问题,这里做一个简单记录。因block 本质是一个函数,当我们定义了它的时候,我们想要监控block内部代码的逻辑,那么我们必须调用函数,这样才能进入到函数的内部。但是我们在用block 的时候又是经常忘记这步,也就是block 调用的步骤
      block 的调用

      if (self.colorBlock) {
            self.colorBlock(color);// 回调函数的调用
      } 
      

      既然有了调用,那么我们就得有block的具体实现了,也就是我们想要做的操作

      我们在 A 页面 实现 block 的具体操作(这里只是修改下背景色)

      // 首先创建 B对象
      B = [[B alloc] init];
      // 调用B 里面的block属性,并实现
      B.colorBlock = ^(UIColor *color){
        // A 页面的背景色设置
      }
      

    二 block 作为某个方法的参数 这是我们经常忽略的一点
    假如我们写了一个方法:
    CreateControllerWithBlock:(colorBlock)block

        b = [[B alloc] init]
        [b CreateControllerWithBlock:^(UIColor *color){
            // block 里面代码的实现操作
        }]
    

    当我们调用这个方法时,我们调用这个方法时,有时会忘记block的工作原理,或者忽略block,从而导致必不能理想办的进入到block函数里面,这点和我们上述提到的其实是同一个问题

    注:核心,不管block是作为参数还是属性,要想执行block面的内容,那么必须得有block的对应的调用部分才可以。

    假如对block仍有疑惑,或者很感兴趣,可以去看block 的具体实现以及本质,这里只是做了一个简单的记录。

    相关文章

      网友评论

          本文标题:对 block(回调函数) 的一点理解

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