美文网首页
OC源码分析-block (二)

OC源码分析-block (二)

作者: TianTianBaby223 | 来源:发表于2019-01-09 22:20 被阅读14次

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


相关文章

网友评论

      本文标题:OC源码分析-block (二)

      本文链接:https://www.haomeiwen.com/subject/enhirqtx.html