十二 .ocBlock
NSProxy是一个不继承NSObject的根类(尽管它遵守NSObject协议),调用[[NSProxy alloc]init]将会产生一个运行异常。
所幸,oc引入被称为“块代码”的第一级函数的概念。就用途来讲块代码可以替代NSProxy子类的需求。
块代码是用于匿名函数的oc结构(即内联)。实现在C层次(因此可用在C和C++代码中)。
块代码最初分配在栈中。
^标识符(又称“块代码操作符”,它是一个在C++中不能被重写的操作符)。
Block的声明、赋值和调用:
闭包(lexical closure)
1.局部不能改变外部变量
2.__block变量(注意:__block两个下划线)
*有了__block,局部能改变外部变量
当外部变量成功被块代码捕获时,如果变量在栈中声明,那么它们仍然位于栈中。一旦有引用它们的块代码被复制到堆中,则这些块变量的存储也会被移到堆中。