首先说下
简化block变量的复杂定义
1)。typefy :讲一个长类型定义为一个短类型
2)。我们可以用typedef 讲长类型的block类型,定义为一个短类型
typedef void (^newType)(); 是一个block 类型,无参数无返回值的类型
typedef void (^newType)();
// 代表重新定义一个类型叫做newType
newType block1;
newType block2;
typedef int(^newType2)(int num1,int num2);
newType2 block3 = ^int(int num1,int num2){
int num3 = num2+num1;
return num3;
};
int num = block3(10,30);
NSLog(@"----%d",num);
---------------------block如何作为函数的参数
1.block是一个数据类型,所以可能可以作为参数
2.如何位函数定义block类型的参数:a.就是小括号中声明一个指定的block变量的就可以了,b.可以使用typedef简化定义,这样就简易了些
3,如何调用带block的参数呢?要求调用的时候,那么要调用的时候传入一个和形参block要求的代码段。
调用的时候,可以先将代码段,存储到一个block变量中,然后传递这个block变量,也可以直接讲符合要求的代码段写到小括号里
4.将block作为函数的参数可以实现什么效果:可以将调用者自己写的1段代码,传递到 函数的内部区去执行.
*/
#import <Foundation/Foundation.h>
typedef void (^newType)();
//为函数定义一个参数,定义个block类型的参数
//无参数无返回值,
//void test(void (^myBlock1)())
void test(newType block1)
{
NSLog(@"~~~~~~~");
block1();
NSLog(@"~~~~~~~~");
}
void test2 (int (^jiafaBlock)(int num1,int num2))
{
NSLog(@"~~~~~~~");
int sum = jiafaBlock(100,200);
NSLog(@"=====%d",sum);
NSLog(@"~~~~~~~~");
}
int main(int argc, const char * argv[]) {
newType type = ^{
NSLog(@"哈哈");
NSLog(@"呵呵");
NSLog(@"嘿嘿");
};
test(type);
test2(^int(int num1, int num2) {
return num1 +num2;
});
// 调用的时候,可以先将代码段,存储到一个block变量中,然后传递这个block变量,也可以直接讲符合要求的代码段写到小括号中传递
// test(^{
// NSLog(@"哈哈");
// NSLog(@"呵呵");
// NSLog(@"嘿嘿");
// }
// );
return 0;
}
test调用block的时候,图片如下