Objc中block的实现
2015-09-08 17:14
369 查看
闭包:闭包是一个函数(或者是指向函数的指针),再加上函数执行上下文的变量(有时候也称做自由变量)。
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的时候 被销毁 )
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的时候 被销毁 )
相关文章推荐
- 深入理解PHP之匿名函数
- Ruby中使用Block、Proc、lambda实现闭包
- LUA中的闭包(closure)浅析
- Lua中的闭包学习笔记
- C#中函数的创建和闭包的理解
- 深入理解javascript作用域和闭包
- javascript作用域和闭包使用详解
- 谈谈JavaScript中的函数与闭包
- 细品javascript 寻址,闭包,对象模型和相关问题
- JavaScript中的闭包原理分析
- 浅谈javascript中的闭包
- javascript 闭包详解
- JavaScript 匿名函数和闭包介绍
- JavaScript 闭包深入理解(closure)
- 深入理解JavaScript 闭包究竟是什么
- JavaScript中的闭包(Closure)详细介绍
- 采用自执行的匿名函数解决for循环使用闭包的问题
- javascript闭包的理解
- js闭包的用途详解
- js闭包所用的场合以及优缺点分析