黑马程序员——IOS基础——Block

来源:互联网 发布:西安软件行业 编辑:程序博客网 时间:2024/04/30 11:16

------- android培训java培训、期待与您交流!

Block 封装了一段代码,可以在任何时候执行

Block可以作为函数参数或者函数的返回值,而起本身又可以带输入参数或返回值

多用于 多线程、异步任务、集合遍历、集合排序、动画转场等

block总结:

1.>定义block变量:

int (^sumBlock)(int ,int);

void (^myBlock)();

2.>利用block封装代码

^(int a,int b){

return a - b;

}

^{

NSLog(@"");

}

3.>block访问外部变量

block 内部可以访问外面的变量

默认情况下,block内部变量不能修改外面的局部

给局部变量加上__block关键字,这个局部变量就可以在block内部修改

4.>利用typedef定义block类型

typedef int (^MyBlock)(int,int);


//test3:利用typedef 简化声明定义block

typedef int (*SumP)(int,int);typedef int (^MyBlock)(int,int);int sum(int a,int b){return a+b;}void test4(){SumP p = sum;SumP p2 = sum;MyBLock = sumBlock;sumBlock = ^(int a,int b){return a+b;};MyBlock = minusBlock(^int a,int b){return a-b;};NSLog(@"%d - %d",sumBlock(10,9),minusBlock(10,5));}


//test3:block修改外部的变量

void test3(){int a = 10;__block int b = 20;void (^block)();block=^{//block 内部可以访问外面的变量NSLog(@"a = %d",a);//默认情况下,block内部变量不能修改外面的局部a = 20;//这是不可以的//给局部变量加上__block关键字,这个局部变量就可以在block内部修改b = 25;};block();}

//test2:有返回值,有形参的block

void test(){int (*sumpoint)(int,int) = sum;  //可以对比一下int d = p(10,13);int (^sumblock)(int,int)=^(int a,int b){    return a+b;}int c = sumblock(10,11);NSLog(@"%d",c);void (^lineBlock)(int) = ^(int n){for(int i=0;i<n;i++){NSLog(@"----------------");}};lineBlock(5);//输出五条线return 0;}

//test1:没有返回值,没有形参的block

void test1(){//block 用来保存一段代码//block的标志: ^/*block跟函数很像:1.可以保存代码2.有返回值3.有形参4.调用方式一样*///定义block变量void (^myblock)() = ^{  /^()  可以省略括号NSLog(@"----------");NSLog(@"----------");};//利用block变量调用block内部的代码myblock();//int a = 10;相似return 0;}


------- android培训java培训、期待与您交流!

0 0
原创粉丝点击