十二 .ocBlock

时间:2024-10-03 11:07:44

NSProxy是一个不继承NSObject的根类(尽管它遵守NSObject协议),调用[[NSProxy alloc]init]将会产生一个运行异常。

所幸,oc引入被称为“块代码”的第一级函数的概念。就用途来讲块代码可以替代NSProxy子类的需求。

  块代码是用于匿名函数的oc结构(即内联)。实现在C层次(因此可用在C和C++代码中)。

  块代码最初分配在中。

  ^标识符(又称“块代码操作符”,它是一个在C++中不能被重写的操作符)。

Block的声明、赋值和调用:

十二 .ocBlock

闭包(lexical closure)

1.局部不能改变外部变量

十二 .ocBlock

2.__block变量(注意:__block两个下划线)

*有了__block,局部能改变外部变量

十二 .ocBlock

当外部变量成功被块代码捕获时,如果变量在栈中声明,那么它们仍然位于栈中。一旦有引用它们的块代码被复制到堆中,则这些块变量的存储也会被移到堆中。