由此可知外面访问的age,其实是_block age对应的结构体里面的age。
一旦block内部要访问对象了,用到某个对象了,block肯定要对它访问的对象进行内存管理。此时block底层结构的Desc会多两个函数,一个copy,一个dispose
下面是age加了_block修饰的情况
此时多了两个内存管理相关的函数,一个copy,一个dispose。
block最开始肯定是在栈上的,也就是栈block,但当block copy到堆上面去的时候,它会做另外一件事情,它会自动将我们block内部使用到的_block 变量的内存也拷贝到堆上,而且block内部对_block变量形成的是强引用。
当另一个block也访问这个_block的时候,当该block也copy到堆上的时候,此时_block不需要在copy到堆上,因为上一次该_block已经copy到堆上了,但该block对_block形成的也是强引用。
block内部要直接使用的对象,既然是block要直接内部使用它,那block就要对它负责,对它内存进行管理,进行负责,所以由block来决定什么时候把它放到堆上面去,什么时候把它从堆中移除。
_weak只能修饰oc对象。
block内部访问到的age就是堆上的!!!