0x01 什么是代码块
Objective-C中的代码块(Block)是iOS4.0和Mac OS X 10.6之后的系统中引进的对C语言的扩展。
它在Xcode和Clang编译器中是有效的,但它并不属于ANSI C标准。
代码块对象(通常称为代码块)除了函数中的代码,还包含变量绑定。代码块有时也称为闭包(closure)。
代码块包含两种类型的绑定:
- 自动型:自动绑定(automatic binding)使用的是栈内存;
- 托管型:托管绑定(managed binding)使用的是堆内存。
关于代码块的内存绑定未来会有更详细的笔记。
因为代码块实际上是由C语言实现的,所以它们在各种以C作为基础的语言内都是有效的,包括Objective-C、C++以及Objective-C++。
0x02 代码块的定义和实现
一般可以用以下关系来表示一个代码块:
<returntype>(^blockname)(list of arguments) = ^(arguments){body;};
代码块通常显得简洁明了:
- 编译器可以通过代码块的内容推导出返回类型,所以返回类型<returntype>是可以省略的;
- 如果代码块没有参数arguments,那也可以省略。
最简化的示例如下:
void (^theBlock)() = ^{printf(&#