Effective Objective-C 2.0 - 第三七条:理解“块”这一概念

前言

  块可以实现闭包,该项特性言语特性是作为“拓展”(extension)而加入GCC编译器中的。Clang 10.4 和 iOS 4.0都含有块正常执行所需的运行期组件,从技术层面江,这是位于C语言层面的特性,可以在C , C++, OC, OC++代码中使用它。

块基础知识

  块和函数相似,只不过块是直接定义在另一个函数内部,和定义它的函数共享同一个范围的东西。块其实就是一个值(对象),可以进行赋值。块的语法结构如下:

return_type (^block_name)(parameters)


//例子

int (^addBlock)(int a, int b) {
    return a + b;
}

//使用
int add = addBlock(2, 5);

  块的优势:在声明它的范围里,所有变量都可被捕获。

int additional = 5;
int (^addBlock) (int a, int b) {
    return a + b + additional;
};

int add = addBlock(2, 5);

  __block:默认情况下,块所捕获的变量是不可在块内部修改值的。除非在变量前加上__block修饰(__block int additional = 3;),

  如果块所捕获的变量是对象类型,则自动保留它,系统在释放块的时候,同时会将其一并释放。这就引出了:块本身可视为对象,那么它和其他对象一样,同样具有引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值