一 : 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对象













网友评论