OC中的block

学习链接:https://www.jianshu.com/p/abb1eafeb068

https://www.jianshu.com/p/5e2984de0e1d

//
//  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;
}
原文地址:https://www.cnblogs.com/caijiaming/p/13822035.html