37、理解“块”这一概念

块其实就是个值,而且自有其相关类型。块类型的语法与函数指针近似。

​ 块的强大之处是:在声明它的范围里,所有变量都可以为其所捕获。有些变量若需在块内修改,需要加上__block修饰符。

​ 如果块所捕获的变量是对象类型,那么就会自动保留它。系统在释放这个块的时候,也会将其一并释放。

descriptor:块对象的总体大小;声明了copydispose两个辅助函数对于的函数指针(在拷贝or丢弃块对象时执行)。

​ 块还会把它所捕获的所有变量都拷贝一份。这些拷贝放在descriptor变量后边,捕获了多少个变量,就要占用多少的内存空间。

​ 块定义时时存储在栈重的。一旦复制到堆上,块就成了带引用计数的对象了。后续的复制操作都不会真的执行复制,只是递增快对象的引用计数。

要点:

  • 块是C、C++、Objective-C中的词法闭包

  • 块可接受参数,也可返回值

  • 块可以分配在栈or堆上,也可以时全局的。分配在栈上的块可以拷贝到堆里,此时就跟标砖的OC对象一样,具备引用计数了

Last updated

Was this helpful?