objective-c高级编程(ios与osx多线程和内存管理)(Blocks-4)

前言:

以下文字都是摘自ios与osx多线程和内存管理一书,方便以后自己过来查阅的.
本文梗概:Block的实质:Block究竟是什么?本节将通过Block的实现进一步帮大家加深理解。。

1. Blocks的实现:


1.3 Block存储域:

通过前面说明可知,Block转换为Block的结构体类型的自动变量__block变量转换为__block变量的结构体类型的自动变量。所谓结构体类型的自动变量,即栈上生成的该结构体的实例。如表4-1所示

名称 实质
Block 栈上Block的结构体实例
__block变量 栈上__block变量的结构体实例

另外,通过之前的说明可知Block也是oc对象。将Block当作oc对象来看时,该Block的类为_NSConcreteStackBlock.虽然该类没有出现在已变换源代码中,但有很多与之类似的类,如:

  • _NSConcreteStackBlock
  • _NSConcreteGlobalBlock
  • _NSConcreteMallocBlock

首先,我们能注意到_NSConcreteStackBlock类的名称中含有“栈”(stack)一词,即该类的对象Block设置在栈上。
同样地,_NSConcreteGlobalBlock类对象如其名“全局”(global)所示,与全局变量一样,设置在程序的数据区域(.data区)中。
_NSConcreteMallocBlock类对象则设置在由malloc函数分配的内存块(即堆)中。
具体整理如表4-2及图4-3所示

###表4-2 Block的类

设置对象的存储域
_NSConcreteStackBlock
_NSConcreteGlobalBlock 程序的数据区域(.data区)
_NSConcreteMallocBlock

4-3

Zerlz wechat
扫码关注一个很懒的程序员!
Winter is coming, give me a penny!