Block的使用

block是封装了函数执行上下文环境的对象

block声明及使用语法

block本质是一个对象,那么我们肯定可以声明block类型

typedef 返回类型(^Block类型名称)(参数类型列表...);

//举例
typedef int(^BlockType)(int, int);

//声明一个block变量
BlockType block1;

直接声明一个block变量(不通过类型)

返回值类型 (^blockName)(参数类型列表...);

//举例
int (^block3)(int, int);

定义block的实现

^ 返回值 (参数列表...){
  //block内部功能实现
};

其中,返回值可以省略,如果参数列表为空,那么参数列表也可以省略。

^ (参数列表){
  //block内部功能实现
};

^ {
  //block内部功能实现
};

#pragma makr - 简写
//完整写法
^int (int a, int b) {
  if ( a >= b ) {
    return a;
  } else {
    return b;
  }
};

// 省略返回值 
^(int a, int b) {
  if ( a >= b ) {
    return a;
  } else {
    return b;
  }
};

// 省略返回值及参数        
^ {
  NSLog(@"block");
};

block作为参数类型

- (void)paramBlock:(int (^)(int, int))block {
    if (block) {
        block(4, 6);
    }
}

block作为函数返回值

- (int(^)(int, int))returnBlock {
    int (^maxBlock) (int , int) = ^(int a, int b) {
        if ( a >= b ) {
            return a;
        } else {
            return b;
        }
    };
    
    return maxBlock;
}

如何理解并记忆block类型及block实现的语法呢?

block的定义,采用的是返回值 (^)(参数类型列表...)的样式,这个是不是和函数指针(返回值 (*函数指针)(参数列表类型...))的定义超级像呢?
block的实现,采用的是^ 返回值 (参数类型列表){ }的样式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容