一、例如,要声明1个无参数、无返回值的block变量,怎么声明,这样声明: void (^myBlock1)(); 如果还要再声明1个无参数、无返回值的block变量呢,是不是要再写一下: void (^myBlock2)(); 如果要声明1个返回值是int类型的,有两个整型参数的block变量,怎么声明,这么声明: int (^myBlock3)(int num1,int num2); 1.问题:定义block变量的时候,要写好大1串啊!类型好长 2.typedef:给1个数据类型起别名 typedef的使用场景: 现在要声明1个 unsigned long long int类型的变量 unsigned long long int num1 = 10; 这是个类型吧,现在我又要声明1个这个类型的变量呢 是不是又要写1遍unsigned long long int啊,这个类型好长1串啊 能不能把它变短一些啊,可以,用什么,用typedef 所以,typedef的使用场景:将1个长类型,定义为1个短类型 typedef unsigned long long int test; test num1 = 10; test num2 = 20; 3.我们也可以使用typedef将很长的block类型,定义为1个短类型 typedef void (^NewType)(); 这句话代表什么意思呢, 代表我重新定义了1个类型,叫做NewType 这个NewType是什么类型的,是block类型的 什么样的block:无参数、无返回值的block 所以这个时候,如果说你想要声明1个无参数、无返回值的block变量 就这么写: NewType block1; 这个时候,blcok1就是1个block变量,什么样的block变量呢,无参数、无返回值的block变量 二、语法: 1.typedef 返回值类型 (^新类型)(参数列表); typedef void (^NewType)(); 代表重新定义了1个类型,叫做NewType; 这是个什么类型呢,是1个block类型 是1个什么样的block类型呢 无参数、无返回值的block类型 所以这个时候,如果要声明1个无参数、无返回值的block变量,可以这么写: NewType block; 2.typedef int (^NewType2)(int num1,int num2); 这个表示什么意思呢: 我是不是重新定义了1个新类型叫NewType2啊 NewType2是1个什么类型,block类型 什么样的block类型 返回值是int,有两个整型参数的block类型 所以这个时候,如果想要声明1个block类型的变量,block类型的变量的要求是有两个整型的参数,1个整型的返回值,那就用NewType2声明就可以了 NewType2 t1; 所以这个时候,t1变量就是1个block变量,什么样的block,整型的返回值,两个整型的参数的block 赋个值试一下 NewType2 t1 = ^int(int num1,int num2){ int num3 = num1+num2; return num3; }; 没有报错 刚才那个无返回值的block变量也赋个值,试一下: typedef void (^NewType)() ; NewType block; block = ^void(){ NSLog(@“大家好。”); NSLog(@“我是人。”); }; 也没有报错