Effective Objective-C(第37-40条)block在栈上?在堆上?

本文探讨了Objective-C中的核心编程概念——Block及其与GCD的关系。讲解了Block如何实现闭包,以及在多线程编程中的重要角色。同时,提到了避免Block引起的循环引用问题,以及通过typedef和handler Block优化代码组织。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    OC中多线程编程的核心就是block与gcd。这虽然是两种不同的技术,但他们是一并引入的。block是一种可在C、C++及OC代码中使用的“词法闭包”(lexical closure),它极为有用,借此机制,开发者可将代码像对象一样传递,令其在不同环境(context)下运行。在block的范围内,它可以访问到其中的全部变量。

    gcd是一种与block有关的技术,它提供了对线程的抽象,而这种抽象基于“派发队列”(dispatch queue)。开发者可将block排入队列中,有gcd负责处理所有调度事宜。gcd会根据系统资源情况,适时得创建、复用、摧毁后台线程,以便处理每个队列。此外,使用GCD还可以方便的完成常见编程任务,比如编写“只执行一次的线程安全代码”(thread-safe single-code execution),或者根据可用的系统资源来并发执行多个操作。

    block和gcd是当前OC的编程基石。因此必须理解其工作原理及功能

第37条:理解block这一概念

    block可以实现闭包。这项语言特性是作为扩展而加入GCC编译器中的,在近期版本的Clang中都可以使用。从技术上讲,这是位于C语言层面的特性,因此只要有支持此特性的编译器以及能执行block的运行期组件,就可以在C、C++、OC,PC++代码中使用它。

block的基础知识

    block其实就是个值,而且自有其相关类型。语法和函数指针近似
void (^someBlock)() = ^{
    //Block implementation here
};
    block的强大之处是:在声明它的范围内,所有变量都可以为其所捕获。例如下面代码:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值