ios开发 Block(一) 代码块
2014-11-07 18:38
141 查看
一、什么是Blocks
Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block。
二、在ios开发中,什么情况下使用Block
Block除了能够定义参数列表、返回类型外,还能够获取被定义时的词法范围内的状态(比如局部变量),并且在一定条件下(比如使用__block变量)能够修改这些状态。此外,这些可修改的状态在相同词法范围内的多个block之间是共享的,即便出了该词法范围(比如栈展开,出了作用域),仍可以继续共享或者修改这些状态。通常来说,block都是一些简短代码片段的封装,适用作工作单元,通常用来做并发任务、遍历、以及回调。
三、block如何申明(对比于c语言中的函数申明)
四、c函数指正和blocks调用
int (*CFunc) (int a) 函数调用
int result = CFunc(10);
int (^BFunc) (int a) 函数调用
int result = BFunc(10);
五、__block 关键字
一个Block的内部时可以引用自身作用域外的变量的,包括static变量,extern变量或自由变量(定义一个变量的时候,如果不加存储修饰符,默认情况下就是自由变量auto,auto变量保存在stack中的。除了auto之外还存在register,static等存储修饰符),对于自由变量,在Block中只读的。在引入block的同时,还引入了一种特殊的__block关键字变量存储修饰符。
Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block。
二、在ios开发中,什么情况下使用Block
Block除了能够定义参数列表、返回类型外,还能够获取被定义时的词法范围内的状态(比如局部变量),并且在一定条件下(比如使用__block变量)能够修改这些状态。此外,这些可修改的状态在相同词法范围内的多个block之间是共享的,即便出了该词法范围(比如栈展开,出了作用域),仍可以继续共享或者修改这些状态。通常来说,block都是一些简短代码片段的封装,适用作工作单元,通常用来做并发任务、遍历、以及回调。
三、block如何申明(对比于c语言中的函数申明)
四、c函数指正和blocks调用
int (*CFunc) (int a) 函数调用
int result = CFunc(10);
int (^BFunc) (int a) 函数调用
int result = BFunc(10);
五、__block 关键字
一个Block的内部时可以引用自身作用域外的变量的,包括static变量,extern变量或自由变量(定义一个变量的时候,如果不加存储修饰符,默认情况下就是自由变量auto,auto变量保存在stack中的。除了auto之外还存在register,static等存储修饰符),对于自由变量,在Block中只读的。在引入block的同时,还引入了一种特殊的__block关键字变量存储修饰符。
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. int result=^(int a){return (a+a-a*a);}(5); NSLog(@"result:%d",result); NSString *(^addStr)(NSString*,NSString*); addStr=^(NSString *str1,NSString *str2){ NSString *str=[NSString stringWithFormat:@"%@_%@",str1,str2]; return str; }; NSString *str3=addStr(@"fewfwe",@"fewefwfrgrthrth"); NSLog(@"str3:%@",str3); int d=5; int(^addNum)(int a,int b); addNum=^(int a,int b){ int c=a+d-b; return c; }; int e=addNum(2,6); NSLog(@"c=%d",e); d=10; int f=addNum(2,6); NSLog(@"f=%d",f); NSString *strr1=@"sssss"; NSString *rstr1=addStr(strr1,@"222"); NSLog(@"rstr:%@",rstr1); NSString *strr2=@"kkkkk"; NSString *rstr2=addStr(strr2,@"222"); NSLog(@"rstr2:%@",rstr2); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
相关文章推荐
- iOS开发-进阶:代码块 block
- [ios开发基础之]代码块 ——block
- Block 介绍 (IOS 开发 分享)
- IOS开发之----代码块的使用
- iOS 代码块Block
- iOS培训——block开发注意的事
- 初探iOS中的Block(代码块与闭包)
- iOS线程开发之--BLOCK & GCD(Grand Central Dispatch)
- IOS Block 代码块使用 (二)
- IOS开发之路-Objective-C 代码块(Block)-block计算器的实现
- ios高效开发二--ARC跟block那点事
- IOS Block代码块的简单使用
- 【无限互联】iOS开发block用法之UIAlertView控件的修改
- ios学习笔记之block在ios开发中的应用
- (转自:ff20081528)IOS学习笔记之block在ios开发中的应用
- IOS开发之----代码块的使用(二)
- iOS线程开发之--BLOCK & GCD(Grand Central Dispatch)
- IOS开发(59)之Block Object的调用
- IOS开发之Block编程
- IOS开发 Block的学习