一、Block本质
1.block本质上是一个封装了函数调用以及调用环境的OC对象,它的内部也有个isa指针
2.block底层结构如下
struct __main_block_desc_0 {
size_t reserved; // 升级版本所需区域
size_t Block_size; // block占用内存大小
// copy,dispose函数管理自动管理对象内存
void (*copy)(struct __main_block_impl_0*,struct __main_block_impl_0*);
void (*dispose)(struct __main_block_impl_0*);
};
struct __block_impl {
void *isa;
int Flags;
int Reserved; // 升级版本所需区域
void *FuncPtr; // 函数指针
};
struct __main_block_impl_0 {
struct __block_impl impl;
struct __main_block_desc_0* Desc;
// 构造函数 -> 返回结构体对象
__main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0){
impl.isa = &_NSConcreteStackBlock;
impl.Flags = flags;
impl.FuncPtr = fp;
Desc = desc;
};
//...捕获值