概念:
这样理解Block,带有局部变量的匿名函数。
blocks模式
block的语法和字面值。下面是一个block (与函数指针的区别,函数指针至少要知道函数的函数名,继而取得指针)。
^{
NSLog(@"this is a block");
};
上面是一个block的省略形式,下面给出完整的形式。
^void (void){
NSLog(@"this is a block");
};
对比一般的c语言函数的亮点不同 (1)没有函数名 (2)带有^
Block语法的BN范式
^ 返回值类型 (参数列表) {表达式}
block 类型变量 (与出c语言函数指针的区别,仅仅是把 * 变成了 ^)
void(^blk)(void);
blk = ^void (void){
NSLog(@"this is a block");
};
void(^blk1)(void) = blk;
blk1();
block 变量的用途
(1)局部变量
(2)函数参数
(3)静态变量
(4)静态全局变量
(5)全局变量
block最为函数参数传递
#import <Foundation/Foundation.h>
#import "ACallBackButton.h"
void func(void(^block)(void));
int main(int argc, const char * argv[])
{
@autoreleasepool {
void(^blk)(void);
blk = ^void (void){
NSLog(@"this is a block");
};
func(blk);
}
return 0;
}
void func(void(^block)(void))
{
//block可以截获局部变量
NSLog(@"block arg func method");
block();
}
运行结果如下:
2014-06-21 15:30:16.957 BlockDemo[611:303] block arg func method
2014-06-21 15:30:16.958 BlockDemo[611:303] this is a block
Program ended with exit code: 0