OC开发之——block(49)
一 概述
- Block封装了一段代码,可以在任何时候执行
- Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值
- 苹果官方建议尽量多用block。在多线程,异步任务,集合遍历,集合排序,动画转场用的很多
二 Block的定义
2.1 定义实例
1 | int (MySum)(int,int)=^(int a,int b){return a+b;}; |
2.2 定义说明
- 定义一个叫MySum的block对象,它带有两个int参数,返回int
- 等式右边就是block的具体实现
2.3 block变量访问
- block可以访问局部变量,但是不能修改
- 如果要修改就要加关键字:
__block
2.4 block变量访问示例
1 | int sum=10; |
三 Block和函数指针对比
3.1 定义函数指针
1 | int (*myFun)(int,int); |
3.2 定义Block
1 | int (^MyBlock)(int,int); |
3.3 调用函数指针
1 | (*myFun)(10,20); |
3.4 调用Block
1 | MyBlock(10,20); |
四 Block的赋值
4.1 在声明的同时定义变量,然后赋值
1 | int (^MySum)(int,int)=^(int a,int b){return a+b;}; |
4.2 也可以先用typedef先声明类型,再定义变量进行复制
1 | typedef int (^MySum)(int,int); |
五 示例
5.1 示例一(不带参数)
1 | void (^myblock)() = ^{ |
5.2 示例二(带参数)
1 | int (^sumblock)(int,int)=^(int a,int b) |
5.3 示例三(变量赋值)
1 | int a=10; |
5.4 示例四(定义类型)
1 | typedef int (^MyBlock) (int,int); |