#import <Foundation/Foundation.h> int main() { //block用来保存一段代码 //block的标志:^ /* block跟函数很像: 1. 可以保存代码 2. 有返回值 3. 有形参 4. 调用方式一样 */ //定义block变量 //返回值int类型,两个int类型的形参 int (^sumblock) (int, int)=^(int a, int b){ return a+b; } //利用block变量调用block内部的代码 int c = sumblock(10, 11); NSLog(@”%d”, c); return 0; } 对比:block与指向函数的指针相似(一个是*另一个用^) int sum(int a, int b) { return a+b; } int (*p) (int, int)=sum; int d=p(10, 12); NSLog(@”%d”, d); 练习:用一个block输入n条横线 int main() { void (^lineBlock) (int) = ^(int n) { for (int i=0; i<n; i++) { NSLog(@”----------------”); } } return 0; } 注意:如果没有形参,可以省略^后的() void (^myblock) () = ^() //这个()可以省略 { NSLog(@”----------------”); } 那么代码为: void (^myblock) () = ^ { NSLog(@”----------------”); } int mian() { int a=10; _block int b=20; void (^block)(); block=^{ //block内部可以访问外面的变量 NSLog(@”a=%d”, a); //默认情况下,block内部不能修改外面的局部变量 a=20; //错误写法,可访问不可修改 //给局部变量加上_block关键字,这个局部变量就可以在block内部修改 b=25; } block(); //没有形参时,block这么调用 return 0; } typedef int (^MyBlock) (int, int); int main() { MyBlock sumBblock=^(int a, int b) { return a+b; } MyBlock minusBlock=^(int a, int b) { return a-b; } int sum=sumBlock(10, 8); int minus=sumBlock(12, 9); NSLog(@”%d----%d”, sum, minus); return 0; } [size=10.5000pt]1. block要掌握的东西 1>如何定义block变量 int (^sumBlock) (int, int); void (^myBlock) (); 2>如何利用block封装代码 ^(int a, int b) { return a+ b; }; ^() { NSLog(@”---------------”); }; ^ { NSLog(@”---------------”); }; 3> block访问外面变量 * block内部可以访问外面的变量 * 默认情况下,block内部不能修改外面的局部变量 * 给局部变量加上_block关键字,这个局部变量就可以在block内部修改 4> 利用typedef定义block类型 typedef int (^MyBlock) (int, int); //以后就可以利用MyBlock这种类型来定义block变量 方式1: MyBlock b1, b2; b1=^(int a, int b) { return a+b; }; 方式2: MyBlock b3=^(int a, int b) { return a -b; };
|