块(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, ^{
// 该块在子线程执行
});
总结来说,块提供了将代码封装为对象的便捷方式,使代码更加灵活可复用。