块的定义
//[返回值类型](形参类型 形参1,形参类型 形参2····) {
//块执行体
//}
以上是一个块的写法
1.返回值类型可以省略,形参也可以参略,但是形参的括号不能参略
^(){
NSLog(@"123");
}
通常我们需要反复调用块,因为块相当于一个匿名的函数,我们调用它时可以先定一个块变量
返回值类型(^块变量名)(形参名,形参名···)
//将块赋给块变量
void(^text)(int, int) = ^(int a, int b) {
NSLog(@"%d",a)
}
//调用块
text(2,3);
###块与局部变量
1.块不可以修改局部变量的值
2.块定义时会捕获局部变量的值
int b = 2;
void(^text)(void) = ^(void) {
NSLog(@"%d",b)
}
//调用块
b = 3;
text();
//此时打印b的值仍然是2
块只在定义时捕获局部变量的值。
###块作为方法参数
// 1.定义一个形参为Block的OC函数
- (void)useBlockForOC:(int(^)(int, int))aBlock
{
NSLog(@"result = %d", aBlock(300,200));
}
// 2.声明并赋值定义一个Block变量
int(^addBlock)(int, int) = ^(int x, int y){
return x+y;
};
// 3.以Block作为函数参数,把Block像对象一样传递
[self useBlockForOC:addBlock];
// 将第2点和第3点合并一起,以内联定义的Block作为函数参数
[self useBlockForOC:^(int x, int y){
return x+y;
}];
先写到这里,知识有限