**
block的简单使用
**
//
// main.m
// block_的使用
//
// Created by mac on 2021/5/31.
//
//block也可以作为函数的返回值 但是返回值类型必须使用typedef定义短类型
/**
block与函数的比较
1 block是一个数据类型,函数就是函数
2 我们可以声明block行的变量 函数就是函数
3 block可以作为函数的参数,函数能直接做我函数的参数
*/
#import <Foundation/Foundation.h>
typedef void (^NewType3)();
void test(NewType3 block3){
NSLog(@"我是上面的");
block3();
}
typedef int (^NewType4)(int num1,int num2);
void test2(NewType4 block){//这块就不用写参数了因为上面 定义了一些东西
NSLog(@"我是算数的");
block(10,20);
}
int main(int argc, const char * argv[]) {
NewType3 type=^{
NSLog(@"哈我是下面的");
};
test(type);
test2(^(int num1, int num2) {
int res=num2+num2;
return res;
});
void (^myBlock1)()=^void(){//
NSLog(@"我是block");
};
myBlock1();
int (^myBlock2)()=^int(){
return 0;
};
int res=myBlock2();
NSLog(@"数字%d",res);
int (^myblock3)()=^int(int num1,int num2){
int result=num1+num2;
return result;
};
int res2=myblock3(1,2);
NSLog(@"相加%d",res2);
//虽然简写有很多,但我们仍然推荐用最标准的方式简写
//可以使用typedef简化
typedef void (^NewType)();
NewType block=^{
NSLog(@"nihao");
};
typedef int (^NewType2)(int num1,int num2);
NewType2 block2=^int(int num1,int num2){
int res=num1+num2;
return res;
};
/**
关于block访问变量问题 全局 定义在外的局部 自己的局部
1 可以看这三个变量
2 可以修改全局,但不可以修改定义在外的局部
3 非要修改定义在外的局部 需要在上面加上_block修饰符 _block int num=100;
*/
return 0;
}