一 : blockcopy操作
在ARC环境下,编译器根据情况自动复制到堆上,比如以下情况.

二 : 对象类型的捕获

在源码中的结构
peron为强指针,block在堆区,只要block不释放,person就还存在

static捕捉

在源码中的表现

MRC下
MRC,block在栈中不会对person进行强引用.不会去持有这个person.

二 : weak 修饰对象在block中的捕获

在源码中对应

总结 : block 在栈
上block肯定不会对person对象进行强引用,
如果block在堆上,block会自动调用内部的copy函数,
源码中
会根据block结构体中对象是 __weak 还是__strong 来决定是强引用还是弱引用
static void __main_block_copy_0(struct __main_block_impl_0*dst, struct __main_block_impl_0*src) {_Block_object_assign((void*)


block访问的是对象类型,就会对访问的对象进行内存管理操作,就会有copy和dispose

三 : 例子分析
block自动进行copy操作因为是GCD,对person强引用,三秒后block挂掉,释放person,不再持有person.

block对person弱引用,代码块过掉person立马挂掉,立刻释放.

person三秒后挂掉,原理同上

person马上释放

person3秒释放,编译器整体观察整体是否有强引用person对象,所以等2结束后,才释放person对象

1秒后是否person对象

网友评论