我们如果想要在函数中添加一个block参数,我们可以这么做
typedef void (^Block)();
void test(Block block)
{
block();
}
Block block1=^{
NSLog(@"----");
};
test(block1);//这样就可以了
也可以这么做,就是直接把符合要求的代码段直接写在小括号中
test(^{
NSLog(@"----");
});
block作为参数的应用,就比如说我们要写排序函数,要求排序函数应该有很多种类型,比如说根据大小进行比较,根据领土面积进行比较。根据人数的多少来进行比较,如果我们有了block作为参数,我们只需要写一个函数就够了,如何比较,我们自己把代码写在block中,然后传入就可以了。就好比字符串比较,用冒泡排序根据字母的顺序来进行排序有用到strcmp(a[i],a[i+1])我们就在这个地方改成我们自己写入的block中的代码.
也就是说当方法的内部需要执行一个功能但是这个功能的具体实现在函数的内部还不确定,我上面说的那种情况就是,这个时候就使用block让调用者自己把这个功能给传入进来。
block变量也可以作为函数的返回值。返回值类型必须用tydepef来定义
Block shuchu()
{
void (^block1)()=^{
NSLog(@"-----");
};
return block1
}
block与函数的相同点是,都封装了一段代码,不同点就是block是一个数据类型,而函数不是。
我们可以声明block类型的变量,而函数不能,block可以作为函数的参数,函数也不能。