iOS开发之oc(十三)--Block的使用(1)
(一)Block
是一种数据类型(就需要定义一种变量保存这种类型)
作用:用Block封装(保存)一段代码,可以在任何时候执行
block跟函数很像:
1.可以保存代码
2.有返回值
3.有形参
4.调用方式一样
(二)Block定义
int (^MySum)(int, int) = ^(int a, int b) { return a+b; };
定义了一个叫MySum的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现
Block可以访问局部变量,但是不能修改。
int sum = 10; int (^MyBlock)(int) = ^(int num) { sum++; // 编译报错 return num * sum; }; // 如果要修改就要加关键字:__block __block int sum = 10;
(三)Block和函数指针对比
int (*myFn)();
int (^MyBlocks)(int,int);
>调用函数指针
(*myFn)(10, 20);
MyBlocks(10, 20);
(四)Blocks的赋值
int (^MySum)(int,int) = ^(int a,int b) {
return a + b;
};
typedef int (^MySum)(int,int);
MySum sum = ^(int a,int b) {
return a + b;
};
>block访问外面的变量
代码示例
int a = 10; __block int b = 20; void (^block)(); block = ^{ // block内部可以访问外面的变量 //NSLog(@"a = %d", a); // 默认情况下,block内部不能修改外面的局部变量 // a = 20; // 给局部变量加上__block关键字,这个局部变量就可以在block内部修改 b = 25; }; block(); }
block要掌握的东西 1> 如何定义block变量 int (^sumBlock)(int, int); void (^myBlock)(); 2> 如何利用block封装代码 ^(int a, int b) { return a - b; };
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。