深入理解Block
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解Block相关的知识,希望对你有一定的参考价值。
参考技术A函数指针
block
block本质上也是个OC对象,它内部也有个isa指针。
block捕获变量的规则如下:
Q:block如何捕获变量?
在ARC环境下,编译器会根据情况自动将栈上的block复制到堆上:
每一种类型的block调用copy后的结果:
Q:下面block分别属于什么类型? / 下面的输出是什么?
当block内部访问了对象类型的auto变量时
__block可以用于解决block内部无法修改auto变量值的问题。
编译器会把__block变量包装为一个对象,然后block捕获__block变量就是增加了一个指向这个对象的指针:
__forwarding指针可以使在栈上的__block变量和在堆上上的__block变量都能正确访问。
以上是关于深入理解Block的主要内容,如果未能解决你的问题,请参考以下文章
深入理解BSS(Block Started by Symbol)