标签:style blog class code java tar
block的标志:^
block跟函数很像: 1.可以保存代码 2.有返回值 3.有形参 4.调用方式一样 (和函数又有区别,函数是在编译之前就已经定义好了,是写死了的东西,而block在运行时可以凭空的产生一段运行代码)
1> 如何定义block变量
int (^mySumBlock)(int, int);
2> 如何利用block封装代码
^(int a, int b) { return a + b; }; ^() { NSLog(@"----------"); }; ^ { NSLog(@"----------"); };
3> block访问外面变量
以代码示例为例:
void test3() { int a = 10;
// 给局部变量加上__block关键字,这个局部变量就可以在block内部修改
__block int b = 20; void (^block)(); block = ^{ // block内部可以访问外面的变量 NSLog(@"a = %d", a); // 默认情况下,block内部不能修改外面的局部变量 // a = 20; // 给局部变量加上__block关键字,这个局部变量就可以在block内部修改 b = 25; }; block(); }
4> 利用typedef定义block类型
typedef int (^MyBlock)(int, int); // 以后就可以利用MyBlock这种类型来定义block变量 MyBlock block; MyBlock b1, b2; b1 = ^(int a, int b) { return a - b; }; MyBlock b2 = ^(int a, int b) { return a - b; };
es: 定义了一个叫MySum的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现
int (^MySumBlock)(int, int) = ^(int a, int b) { return a+b; };
// ps: 如果block没有形参,可以省略后面的()
pk(对比一下)指向函数的指针:
int sum(int a , int b) { return a + b; } int main() { // 指针函数的指针 int (*p)(int, int) = sum; int d = p(10, 12); NSLog(@"%d", d); }
12-Objective-C特有语法:(高效率)block数据类型,布布扣,bubuko.com
12-Objective-C特有语法:(高效率)block数据类型
标签:style blog class code java tar
原文地址:http://www.cnblogs.com/lszwhb/p/3720282.html