前言
这里 有关于 block 的 5 道测试题,建议你阅读本文之前先做一下测试。
先介绍一下什么是闭包。在 wikipedia 上,闭包的定义 是:
In programming languages, a closure is a function or reference to a function together with a referencing environment—a table storing a reference to each of the non-local variables (also called free variables or upvalues) of that function.
翻译过来,闭包是一个函数(或指向函数的指针),再加上该函数执行的外部的上下文变量(有时候也称作自由变量)。
block 实际上就是 Objective-C 语言对于闭包的实现。
block 配合上 dispatch_queue,可以方便地实现简单的多线程编程和异步编程,关于这个,我之前写过一篇文章介绍:《使用 GCD》。
本文主要介绍 Objective-C 语言的 block 在编译器中的实现方式。主要包括:
- block 的内部实现数据结构介绍
- block 的三种类型及其相关的内存管理方式
- block 如何通过 capture 变量来达到访问函数外的变量