一:Block的声明:
void(^myBlock)(int);
↑ ↑ ↑
返回值 变量名 参数
有返回值 和多个参数形式的例子:
int(^myBlock((int, NSString *, NSObject);
二:Block的创建:
myBlock = ^(int i){
NSLog(@"%d", i);
};
或者:
void(^myBlock)(int) =
^(int i){
NSLog(@"%d", i);
};
三:Block的使用:
myBlock(100);
就像NSLog(@"aaaaa");一样,直接调用;
四:Block当做参数传递给方法:
- (void) testBlock:(void(^)(int)) myBlock{
myBlock(10);
}
调用的时候: [self testBlock:myBlock];
或者直接创建一个匿名的Block
[self testBlock:^(int i){
NSLog(@"%d", i);
}];
可以打个断点查看调用堆栈情况,这是一个回调,调用方法的之后再去调用块里的代码;
五:使用typedof定义代码块类型
typedef void(^MyBlock)(int);//红色的是块类型的名称
创建:
MyBlock block = ^(int i){
NSLog(@"sss");
};
使用:
block(1);
在方法里当做参数就更简便了:
- (void)testBlock1: (MyBlock) block{
}