block用途:保存代码块 block标志:^ block与函数的相似之处: * 可以保存代码 * 有返回值 * 有形参 参考代码:
- #import <Foundation/Foundation.h>
- typedef int (*FunctionPointer) (int , int); // 使用宏定义定义新类型FunctionPointer
- typedef int (^BlockPointer) (int , int); // 使用宏定义定义新类型BlockPointer
- int sum(int a , int b)
- {
- return a+b;
- }
- int main()
- {
- int (^sumBlock) (int , int); // 定义一个block变量sumBlock,有int类型返回值,接受2个int类型的形参
- sumBlock = ^(int a , int b){
- return a+b;
- }; // 将代码块赋值给sumBlock
- FunctionPointer fp = sum;
- BlockPointer bp = ^(int a , int b) {
- return a+b;
- };
- NSLog(@”%d” , sum(1 , 2));
- NSLog(@”%d” , sumBlock(1 , 2));
- NSLog(@”%d” , fp(1 , 2));
- NSLog(@”%d” , bp(1 , 2));
- // 4个NSLog方法打印相同结果:3
- void test();
- test(); // 打印:a = 1 b = 3
- return 0;
- }
- void test()
- {
- int a = 1;
- __block int b = 2;
- void (^myBlock) () = ^{
- NSLog(@”a = %d” , a); // block内部默认可以访问外部变量
- //a++; // block内部默认不能修改外部变量
- b++; // 局部变量加上__block关键字,就可以在block内部修改
- NSLog(@”b = %d” , b);
- }
- myBlock();
- }
复制代码
|
|