OC学习笔记10--Block的概念与使用方式
2015-08-03 15:58
357 查看
#import <Foundation/Foundation.h> // 利用typedef 方便定义Block类型变量 typedef int (^SumBlo)(int,int); typedef SumBlo (^GetBlo)(SumBlo); int main() { int outA=5,sum; //变量声明带上__block表明在Block中可修改该变量 __block outB=10; SumBlo sumBlo=^(int a,int b) { return a+b; }; // 该Block参数为另一个Block类型,返回值也是一个Block类型 GetBlo getBlo=^(SumBlo sb) { //Block内可访问外部局部变量, //但是只能修改以__block声明的外部局部变量 outB=sb(outA,outB); return sb; } // 通过变量名调用Block,执行Block中的代码段,并获得返回值 SumBlo sumBlo2=getBlo(sumBlo); BOOL b=sumBlo2==sumBlo; sum=sumBlo2(outA,outB); NSLog(@"sumBlo2_equals_sumBlo=%d,outA=%d,outB=%d,sum=%d",b,outA,outB,sum); return 0; }
Block:
概念:封装了一段待执行的代码段,该代码段可以有形参和返回值,
也可以作为其他函数、方法或Block的参数或返回值,
使用Block类型变量调用后执行代码段;
代码形式:
^(形参列表)
{
代码段...
return XXX;
};
Block类型变量:
类似指向函数的指针,指向一个Block,
通过 变量名(参数) 方式执行Block中的代码段;
声明方式:
返回值类型 (^变量名)(参数类型);
例: void (^myBlock)(int,NSString *);
利用typedef 方便声明:
typedef void (^MyBlo)(int,NSString *);
MyBlo blo=^(int a,NSString *str)
{
.....
};
Block代码段中访问外部变量:
可以访问外部局部变量,
默认情况无法修改外部局部变量,
外部局部变量声明中加上 __block 即可在Block中修改;
相关文章推荐
- Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析
- Android GetStringUTFRegion()
- 并查集
- MySQL group_concat() 长度限制
- 【MySQL锁之】MyISAM存储引擎及其锁机制
- hdoj-2041 超级楼梯【递归】
- 线程同步---条件变量
- 《招聘一个靠谱的iOS》面试题参考答案(上)
- Android中的日期选择器
- USB外接输入设备(如:键盘,鼠标等)的监听
- 文章标题
- JAVA设计模式之工厂模式 代码是原创
- Hadoop入门进阶课程10--HBase介绍、安装与应用案例
- 刚开始学:C语言 SelecttionSort选择排序算法
- 二进制枚举及容斥
- 【Objective-C编程】 Must explicitly describe intended ownership of an object array parameter异常报错解决方案
- Linux 基础篇 --- 添加新的虚拟硬盘
- 广告公司薪水一览,看看你达到哪个级别?
- ios UIWebView 加载本地html,js,css文件的问题
- php导出Excel文件简单的方法(非PHPEXCEL)