一.什么是Blocks
Blocks是C语言的扩充功能。如果用一句话来概括就是:带有自动变量的匿名函数。
第一次看见Blocks的时候,感觉很类似C语言的函数指针,尤其是Block类型变量,更是有极强的相似度。但Blocks不是一个指针,而是一个不带名字的函数,它允许开发者在两个对象之间将任意的语句当作数据进行传递,所以在一些场合使用Blocks很方便简洁。
二.Blocks的作用
做回调.比代理更简单便捷.
三.Blocks的写法
1.无参无返回值的Blocks
void (^blocks1)(void);
2.有参有返回值的Blocks
int (^blocks2)(int a,int b);
3.自定义无参无返回值的Blocks
typedef void (^typedefBlocks1) (void);
4.自定义有参有返回值的Blocks
typedef int (^typedefBlocks2) (int a,int b);
四.Blocks作为参数传递
1.无参无返回值的Blocks作参数传递
- (void)textBlocks1:(void (^)(void) )blocks
2.有参有返回值的Blocks作参数传递
-(int)textBlocks2:(int (^)(int a,int b))blocks
3.自定义无参无返回值的Blocks作参数传递
- (void)textBlocks3:(typedefBlocks1)blocks
4.自定义有参有返回值的Blocks作参数传递
- (int)textBlocks4:(typedefBlocks2)blocks
五.用Blocks做回调
ViewController2 *vc2 = [[ViewController2 alloc]init];
[vc2 setBlocks:^(CGFloat fontSize) {
label.font = [UIFont systemFontOfSize:fontSize];
}];
[self presentViewController:vc2 animated:YES completion:nil];
@interface ViewController2 : UIViewController
{
void (^saveBlocks)(CGFloat fontSize);
}
- (void)setBlocks:(void (^)(CGFloat fontSize))blocks;