学习链接:https://www.jianshu.com/p/abb1eafeb068
// // learn_blo.m // learn_KVC // // Created by 蔡佳明 on 2020/10/15. // /** block在OC中叫闭包 其实block跟C中的函数指针很相似,可以根据函数指针来理解block 比如 C语言中的 int(*) (int x,int y)代表指向两个整形的参数,返回值为一个整形的指针 而在OC的block中 是如何实现的呢 且看下边的代码 */ #import <Foundation/Foundation.h> //两个参数 返回值为一个参数的block int (^block)(int,int) = ^(int x,int y) { return x+y; }; //无返回值 无参数的block void (^block1)(void)=^(void) { NSLog(@"无参数无返回值的block呀!!!"); }; //有返回值 无参数 int (^block2)(void) = ^(void) { return 1; }; //无返回值 有参数 void (^block3)(int ,int ) = ^(int x,int y) { NSLog(@"%d + %d = %d",x,y,x+y); }; int xx=2; int main() { NSLog(@"%d",block(3,5)); block1(); NSLog(@"这个值等于多少呀,%d",block2()); block3(2,4); //还有一个非常重要的点 block和变量之间的关系 int z=1; void (^block4)(void)=^(void) { // z++; //会报错 不能修改局部变量 //能访问局部变量 NSLog(@"%d",z); //能修改全局变量 xx++; NSLog(@"%d",xx); }; block4(); return 0; }