闭包:闭包是一个函数(或者是指向函数的指针),再加上函数执行上下文的变量(有时候也称做*变量)。
block 实际上就是 oc语言对闭包的实现。
block的数据结构定义如下
isa
flags 用bit位 表示一些block的附加描述信息
reserved 保留变量
invoke 函数指针 指向具体的block实现的函数调用地址
descriptor------(reserved size copy dispose) block的保留变量 以及size 以及copy和dispose函数的指针
variables
在oc中 有3种block
_NSConcreteGlobalBlock 全局静态的block 不会访问外部变量(可以理解为 nil main函数 后的 {})
_NSConcreteStackBlock 栈中的block 函数返回时被销毁
_NSConcreteMallocBlock 堆中的block 程序员自己销毁 (引用计数为0的时候 被销毁 )