Block常见面试题精华版

block本质是什么,需要注意什么?

Block 的本质是一个封装了函数和函数调用环境(捕获的变量)的 Objective-C 对象。Block 的实现基于 C 语言的函数指针,但它们比普通的函数指针更加强大,因为它们能够捕获周围的状态。

在 Objective-C 中,每个 block 实际上是一个结构体,该结构体包含了几个重要的元素:

  1. isa 指针,表明这是一个对象,并指向该 block 类型的类对象。
  2. 函数指针,指向 block 的执行体(即 block 里写的代码)。
  3. 捕获的变量的副本,block 能够捕获其作用域内的变量,这些变量在 block 被定义时拷贝到了 block 结构体中。
  4. 引用计数,用于在非 ARC 环境下管理 block 的生命周期。
  5. 其他用于管理 block 生命周期和状态的字段。

使用 block 时需要注意以下几个方面:

  1. 循环引用:Block 内部如果捕获了 self 或其成员变量,且 self 同时持有这个 block,会产生循环引用,导致内存泄漏。为了打破循环引用,通常会使用 __weak 关键字来声明一个 self 的弱引用。

  2. 内存管理:在非 ARC 环境下,需要手动管理 block 的拷贝和释放。在 ARC 环境下,block 通常会自动从栈复制到堆上,但仍需要注意循环引用问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值