如何在Objective-C中正确使用Block

Block 是苹果在 iOS4 开始引入的对C语言的扩展,用来实现匿名函数的特性,Block 是一种特殊的数据类型,其可以正常定义变量、作为参数、作为返回值。Block 还可以保存一段代码,在需要的时候调用,目前 Block 已经广泛应用于 iOS 开发中,常用于 GCD、动画、排序及各类回调。然而这篇文章并不是分析 Block 的底层实现,只是简单的记录下 Block 的基本语法,至于为什么要写,因为容易忘记!

局部变量

1
2
3
returnType (^blockName)(parameterTypes) = ^returnType(parameters) {
// code
};

eg:

1
2
3
4
5
NSInteger (^AddOneBlock)(NSInteger) = ^NSInteger(NSInteger param) {
return param + 1;
};

NSInteger result = AddBlock(2);

属性

1
@property (nonatomic, copy) returnType (^blockName)(parameterTypes);

typedef

1
typedef returnType (^TypeName)(parameterTypes);

方法参数

1
- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;

eg:

1
- (void)handleResultWithBlock:(void (^)(NSString *urlString))resultBlock;

方法调用参数

1
2
3
[someObject someMethodThatTakesABlock:^returnType (parameters) {
// code
}];

eg:

1
2
3
[self handleResultWithBlock:^(NSString *urlString) {
// code
}];
0%