37、理解“块”这一概念
块其实就是个值,而且自有其相关类型。块类型的语法与函数指针近似。
块的强大之处是:在声明它的范围里,所有变量都可以为其所捕获。有些变量若需在块内修改,需要加上__block修饰符。
如果块所捕获的变量是对象类型,那么就会自动保留它。系统在释放这个块的时候,也会将其一并释放。
descriptor:块对象的总体大小;声明了copy与dispose两个辅助函数对于的函数指针(在拷贝or丢弃块对象时执行)。
块还会把它所捕获的所有变量都拷贝一份。这些拷贝放在descriptor变量后边,捕获了多少个变量,就要占用多少的内存空间。
块定义时时存储在栈重的。一旦复制到堆上,块就成了带引用计数的对象了。后续的复制操作都不会真的执行复制,只是递增快对象的引用计数。
要点:
块是C、C++、Objective-C中的词法闭包
块可接受参数,也可返回值
块可以分配在栈or堆上,也可以时全局的。分配在栈上的块可以拷贝到堆里,此时就跟标砖的OC对象一样,具备引用计数了
Last updated
Was this helpful?