1.定義
block是對(duì)函數(shù)上下文及其執(zhí)行的封裝赦邻。
2.實(shí)現(xiàn)結(jié)構(gòu)體
block 結(jié)構(gòu)體:
struct __block_impl_0 {
struct __block_impl impl;
struct __main_block_desc_0 *Desc;
int age;
}
impl結(jié)構(gòu)體
struct __block_impl {
void *isa; // isa指針
void Flags; // 按位表示block的一些附加信息
int Reserved; // 保留變量
void *FuncPtr; // 函數(shù)指針北苟,指向block要執(zhí)行的函數(shù)
}
3.類型
共有三種類型的block,分別是全局block(_NSConcreteGlobalBlock)远舅,堆block(_NSConcreteMallocBlock),棧block(_NSConcreteStackBlock)哼凯,存儲(chǔ)位置位于.data盈包,堆區(qū)和棧區(qū)。
copy操作:
GlobalBlock --------copy----------> 沒有變化
StackBlock --------copy-----------> MallocBlock
MallocBlock --------copy-----------> 引用計(jì)數(shù)加一
4.循環(huán)引用
自循環(huán)引用
相互循環(huán)引用
多循環(huán)引用
解除:
_ _waek _ _block