Block介绍(一)基础
来源:互联网 发布:虚拟聊天软件下载 编辑:程序博客网 时间:2024/05/19 04:51
一、概述
Block是C级别的语法和运行时特性。Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存、堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block。
二、热身
先看一个比较简单的Block例子:
int multiplier = 7;int (^myBlock)(int) = ^(int num) { return num * multiplier;};
在这个例子中,myBlock是一个Block变量,它接受一个int类型的参数,返回一个int类型的值。是不是很像C函数?
来,让我们typedef一下
typedef void (^BoolBlock)(BOOL);//一个只接受一个BOOL参数,没有返回值的blocktypedef int (^IntBlock)(void);//一个没有参数,返回int的blocktypedef BoolBlock (^HugeBlock)(IntBlock);//看看,这个HugeBlock的参数和返回值都是block
三、更详细的例子
注意,上面的typedef都还有效~
主动调用一下:
- (void)someMethod{ BoolBlock ablock = ^(BOOL bValue) { NSLog(@"Bool block!"); }; ablock();}
作为参数返回:
typedef void (^BoolBlock)(BOOL);- (BoolBlock)foo(){ BoolBlock ablock = ^(BOOL bValue) { NSLog(@"Bool block!"); }; return [[ablock copy] autorelease];//一定要copy,将其复制到堆上,更详细的原理,将在后续章节讲解}
类的一个成员:
@interface OBJ1 : NSObject@property (nonatomic, copy)BoolBlock block;//理由同上啊,同学们@endOBJ1 *obj1 = ...obj1.block = ^(BOOL bValue) { NSLog(@"Bool block!"); };
其他函数的参数:
- (void)foo(BoolBlock block){ if (block) { block(); }}
甚至其他block的参数:
BoolBlock bBlock = ^(BOOL bV){if(Bv){/*do some thing*/}};HugeBlock hBlock = ^(BoolBlock bB) {bB();};hBolck(bBlock);
啊,全局变量!:
static int(^maxIntBlock)(int, int) = ^(int a, int b){return a>b?a:b;};int main(){ printf("%d\n", maxIntBlock(2,10)); return 0;}
好了,你知道block大概能怎么用了。
四,特殊的标记,__block
如果要在block内修改block外声明的栈变量,那么一定要对该变量加__block标记:
int main(){ __block int i = 1024; BoolBlock bBlock = ^(BOOL bV) { if (bV) { i++;//如果没有__block标记,是无法通过编译的。 } };}
好了,基础很快,更详细的内容将用来介绍深入的东西。
- Block介绍(一)基础
- Block介绍(一)基础
- Block介绍(一)基础
- Block介绍(一)基础
- Block介绍(一)基础
- Block介绍(一)基础
- Block介绍(一)基础
- iOS中Block介绍(一)基础
- iOS中Block介绍(一)基础
- iOS中Block介绍(一)基础
- iOS中Block介绍(一)基础
- iOS中Block介绍(一)基础
- iOS中Block介绍(一)基础
- iOS中Block介绍(一)基础
- iOS中Block介绍(一)基础
- iOS中Block介绍(一)基础
- iOS中Block介绍(一)基础
- iOS中Block介绍(一)基础
- paip. c++ doxygen 文档工具的使用以及跟QT CREATOR的集成
- Block教程系列
- 十、android的ContentProvider对外共享数据
- 北京hulu笔试,按Z字形打印矩阵
- django-cms学习笔计(一)
- Block介绍(一)基础
- Struct和Class的区别
- Block介绍(二)内存管理与其他特性
- Java Web 视频教程(收藏)
- ACM网站
- block介绍(三)揭开神秘面纱(上)
- paip.提升用户体验---c++ gcc 命令语法着色搭配方案
- UVa 701 The Archeologists' Dilemma (数学&枚举)
- block介绍(四)揭开神秘面纱(下)