block
block 允许开发者在两个对象之间将任意语句当做数据进行传递
block 使用了与一个函数相同的机制:可以像声明一个函数一样来声明一个block;
可以像定义个函数的方法一样来定义一个block,也可以将block当做一个对象来调用
//代码块的声明:
// 返回值类型(^代码块的名称)(参数列表);
//代码块的实现:
// 代码块的名称 = ^(参数列表){代码块的行为主体};
声明代码块
void(^aBlock)(NSString *x);
实现代码块
aBlock = ^(NSString *x){
NSLog(@"%@",x);
};
代码块的调用
aBlock(@"我是代码块!");
代码块的声明与实现一起进行
double(^getArea)(double width,double height) = ^(double width,double height){
double area = width * height;
return area;
}
//调用
double area = getArea(2,10);
NSLog(@"%.2f",area);
代码块能够使用和修改全局变量
//声明一个全局变量
int global = 100;
//代码块
void(^myBlock)() = ^(){
global++;
NSLog(@"%d",global);
}
代码块可以使用局部变量,但是要想修改局部变量,要在变量前加上 __block 关键字(注意是两条下划线)。
__block int local = 200;
void(^myBlock)() = ^(){
local++;
NSLog(@"%d",local);
}