1.定义
block是对函数上下文及其执行的封装。
2.实现结构体
block 结构体:
struct __block_impl_0 {
struct __block_impl impl;
struct __main_block_desc_0 *Desc;
int age;
}
impl结构体
struct __block_impl {
void *isa; // isa指针
void Flags; // 按位表示block的一些附加信息
int Reserved; // 保留变量
void *FuncPtr; // 函数指针,指向block要执行的函数
}
3.类型
共有三种类型的block,分别是全局block(_NSConcreteGlobalBlock),堆block(_NSConcreteMallocBlock),栈block(_NSConcreteStackBlock),存储位置位于.data,堆区和栈区。
copy操作:
GlobalBlock --------copy----------> 没有变化
StackBlock --------copy-----------> MallocBlock
MallocBlock --------copy-----------> 引用计数加一
4.循环引用
自循环引用
相互循环引用
多循环引用
解除:
_ _waek _ _block