首页 > 代码库 > 12-Objective-C特有语法:(高效率)block数据类型
12-Objective-C特有语法:(高效率)block数据类型
一、 基本简介
- block用来保存一段代码
block的标志:^
- block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。
- 苹果官方建议尽量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多
-
block跟函数很像: 1.可以保存代码 2.有返回值 3.有形参 4.调用方式一样 (和函数又有区别,函数是在编译之前就已经定义好了,是写死了的东西,而block在运行时可以凭空的产生一段运行代码)
二、 Block的特性
-
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先声明类型,再定义变量进行赋值
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); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。