//Block的定义:Block也是一个函数,称为一个语法块(实现某个特定功能),只不过Block是一个比较特殊的函数,没有函数名称的函数,又叫做匿名函数
格式:
返回值类型 (^Block变量名称) (参数列表) = 返回值类型(可以省略) ^(参数列表(一定要有参数名称))
{
Block的实现部分
};
#import
#import "Person.h"
//Block重定义
typedef int (^newBlock)(int ,int);
int count = 18;//定义一个全局变量,不管在 main函数内部还是在外部都可以访问和使用
int main(int argc, const char * argv[]) {
@autoreleasepool {
//用Block实现求两个数之间的最大值
int (^maxBlock)(int,int) = ^(int a,int b){
return a > b ? a : b;
};//分号不可以省略,表示Block语法的结束
//Block调用 使用Block变量名(参数)调用
int max = maxBlock(17,10);
NSLog(@"max = %d",max);
//无参无返回值
void (^sayHiBlock) () = ^(){
NSLog(@"Hello!");
};
//Block调用
sayHiBlock();//此时括号不能省略
__block int num3 = 100;//定义一个局部变量
//有参数无返回值
void (^printfBlock) (int) = ^(int number){
NSLog(@"number = %d",number);
//改变全局变量count的值
count++;//在Block语法块(实现部分)可以修改和访问全局变量
num3++;//在Block当中,不可以直接修改局部变量的值,如果想修改局部变量的值则需要在局部变量之前加上__block修饰,其作用是__block修饰符可以让Block正常访问到其它函数的局部变量以及修改,保护局部变量的可读性,(保护局部变量还能被其他函数访问以及修改)
};
//Block调用
printfBlock(78);
printf("count = %d\n",count);