1、block的本质:是一个结构体,里面有一个isa指针;


2、底层结构:__block_impl、__main_block_desc_0、__Block_byref_a_0 *a;

3、Block的分类:NSGlobalBlock、NSMallocBlock、NSStackBlock
a、NSGlobalBlock:全局、在数据区;没有访问 auto变量

b、NSMallocBlock:存储在堆上

c、NSMallocBlock:存储在栈上,block捕获了自动变量,block没有执行过copy操作

4、block的定义:


5、防止block循环引用:
a、__weak typeof(self) weakSelf = self;__strong__typeof(weakSelf)strongSelf = weakSelf;

b、__block ViewController *vc = self;

c、直接在blcok里面传入需要释放的对象

网友评论