- block本质
block
底层就是一个struct __main_block_impl_0
类型的结构体
,这个结构体中包含一个isa
指针,本质上是一个OC
对象block
是封装了函数调用
以及函数调用环境
的OC
对象
-
block底层结构
block
底层结构就是__main_block_impl_0
结构体,内部包含了impl结构体
和Desc结构体
以及外部需要访问的变量
,block
将需要执行的代码放到一个函数里,impl
内部的FuncPtr
指向这个函数的地址,通过地址调用这个函数,就可以执行block
里面的代码了。Desc
用来描述block
,内部的reserved
作保留,Block_size
描述block
占用内存
-
block的变量捕获
局部变量block
访问方式是值传递
,auto自动变量
可能会销毁,内存可能会消失,不采用指针访问;
局部静态变量block
访问方式是指针传递
,static变量
一直保存在内存中,指针访问即可;
全局变量、静态全局变量block
不需要对变量捕获,直接取值
// block的变量捕获代码解析如下
a