闭包/block
在 OC(Objective-C)中,闭包(Block)是一种捕获周围上下文并能在以后执行的代码段。它与其他编程语言中的闭包概念类似,比如 Swift 中的闭包或 C++ 中的 lambda 表达式。
Block 的定义和使用
闭包通常通过 ^
符号定义,形式如下:
示例
简单使用:
无参数、无返回值的 Block
带参数和返回值的 Block
Block 捕获变量
Block 会自动捕获它所定义时周围的局部变量,并且可以在执行时访问这些变量。需要注意的是,默认情况下,Block 捕获的局部变量是只读的。
如果你希望在 Block 中修改捕获的局部变量,需要将其声明为 __block
修饰符。
Block 内存管理
Objective-C 中的 Block 分为三类:
栈上的 Block:定义在函数或方法中的 Block 默认是栈上的。当函数或方法结束时,栈上的 Block 就会被销毁。
堆上的 Block:当你需要在函数或方法之外执行 Block 时,栈上的 Block 会被复制到堆上。通过
Block_copy
或者在函数外使用的情况下,系统会自动将 Block 从栈复制到堆上。全局 Block:如果 Block 没有捕获任何外部变量,它会被当作全局的 Block。
Block 与 GCD 的结合
Block 在 GCD(Grand Central Dispatch)中大量使用,特别是用于并发编程。以下是一个简单的异步执行任务的示例:
通过 Block,OC 实现了简洁而强大的闭包功能,非常适合异步任务、回调处理等。
Last updated