Objective-C块代码详解

块(Block)是Objective-C中的匿名函数代码块,可以封装某段代码逻辑,然后像对象那样使用和传递。掌握块的使用可以编写出更简洁、灵活的代码。

块的定义

使用^{}语法定义一个块:

void (^blockName)(参数类型) = ^(参数){
   // 代码体
};

例如定义一个无参数无返回值的块:

void (^simpleBlock)() = ^{
  NSLog(@"Hello World!");
};

块的使用

定义好的块可以当成一个对象使用,包括:

  • 赋值给变量
  • 作为参数传递
  • 作为方法返回值返回
// 作为参数传递块
[obj doSomethingWithBlock:simpleBlock];

// 获取块返回值
void (^returnBlock)() = [obj returnABlock];

块内访问外部变量

块内部可以访问外部变量,通过__block指定可以修改外部变量:

objectivec 
__block int count = 0;
void (^myBlock)() = ^{
  count++;
}

线程与块

块经常用于与GCD配合进行多线程编程。块内的代码会在指定线程执行。

dispatch_async(queue, ^{
  // 该块在子线程执行 
});

总结来说,块提供了将代码封装为对象的便捷方式,使代码更加灵活可复用。