Blocks的基础使用

Blocks是C语言的扩充功能。可以用一句话来表示Blocks的扩充功能;带有自动变量(局部变量)的匿名函数。顾名思义,所谓匿名函数就是不带有名称的函数。C语言的标准不允许存在着这样的函数。

Blocks基本语法

1.没有函数名。

2.带有“^”。

第一点不同是没有函数名,因为它是匿名函数。第二点不同是返回值类型前带有”^”(插入记号,caret)记号,因为OS X、iOS应用程序的源代码中将大量使用Block,所以插入该记号便于查找。表达式如下:

^ 返回值类型 参数列表 表达式

“返回值类型”同C语言函数的返回值类型,“参数列表”同C语言函数的参数列表,“表达式”同C语言函数中允许使用的表达式。当然与C语言函数一样,表达式中含有return语句时,其类型必须与返回值类型相同。
虽然前面出现过省略方式,但Block语法可省略好几个项目。首先是返回值类型 如下:

^ 参数列表 表达式

省略返回值类型时,如果表达式中有return语句就使用该返回值的类型。如果表达式中没有return语句就使用void类型。表达式中含有多个return语句时,所有return的返回值类型必须相同。

Block的基本使用

Block的模式
1.无参数无返回值的Block
2.有参数无返回值的Block
3.有参数有返回值的Block

创建两个视图,实现由ViewController 跳转到OtherViewController 然后在OtherViewController中触发事件回调 使ViewController得颜色改变

首先在OtherViewController里面声明一个block
typedef void(^changeColor)(id);// 声明一个block,声明这个Block必须遵守声明的要求。
@property (nonatomic,copy) changeColor backgroundColor;

然后在OtherViewController中实现写一个方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UIColor *color = [UIColor blueColor];
    self.backgroundColor(color);
}
在ViewController 中的代码

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    OhterViewController *vc = [[OhterViewController alloc]init];
    //回调修改颜色
    vc.backgroundColor = ^(UIColor *color){
        self.view.backgroundColor = color;
    };
    [self.navigationController pushViewController:vc animated:YES];
}

你可能感兴趣的:(Blocks的基础使用)