IOS面试题——OC中Block本质(4)
一 面试题汇总
- block是什么?封装了函数以及函数调用环境的OC对象
- block分为哪几种类型?有什么区别
- block变量捕获有哪些情况?auto,static,
- ARC,MRC情况下定义block使用的属性关键字有什么区别,为什么
- ARC环境下,哪些情况编译器会根据情况自动将栈上的block复制到堆上
- block内部为什么不能修改局部变量,__block为什么能?
__block
有什么限制?__block
不能修饰全局变量、静态变量(static)__weak, __strong
分别有什么作用
二 面试题解答(仅供参考)
2.1 block是什么?封装了函数以及函数调用环境的OC对象
1 | 在 Objective-C 中,block 是一种特殊的对象,也称为闭包(closure)。 |
2.2 block分为哪几种类型?有什么区别
1 | 在 Objective-C 中,block 可以根据其内部捕获的变量的生命周期和存储位置来分为以下几种类型: |
2.3 block变量捕获有哪些情况?auto,static,
1 | 在Objective-C 中,block可以捕获外部变量,而捕获的方式会受到变量的存储类别和block的类型(栈块或堆块)的影响。 |
2.4 ARC,MRC情况下定义block使用的属性关键字有什么区别,为什么
1 | 在 Objective-C 中,ARC(Automatic Reference Counting)和 MRC(Manual Reference Counting)是两种不同的内存管理方式, |
2.5 ARC环境下,哪些情况编译器会根据情况自动将栈上的block复制到堆上
1 | 在 ARC(Automatic Reference Counting)环境下, |
2.6 block内部为什么不能修改局部变量,__block为什么能?
1 | 对于普通的局部变量,block 按值捕获,修改只会影响到 block 内部的副本,不会影响到原始变量。 |
2.7 __block
有什么限制?__block
不能修饰全局变量、静态变量(static)
1 | __block 在 Objective-C 中用于修饰局部变量,允许在 block 内部修改这些变量的值, |
2.8 __weak, __strong
分别有什么作用
1 | __weak 和 __strong 都是用于在 Objective-C 中管理内存的修饰符,它们通常用于声明对象的引用。 |
三 参考
- 简书—OC中Block本质