block 是iOS4.0之后出现的技术,block变量可以看成oc的对象,但block的语法和技术是更底层c的知识,效率比代理高
block变量的实质是一个匿名函数(函数可以有参数、可以有返回值但没有函数名)
声明一个最简单的block变量, _myFirstBlock 为变量的名称,声明时规定了要赋给_myFirstBlock的函数,没有参数、没有返回值
(1)定义 block
@interfaceRootViewController()
{
void(^_myFirstBlock)(void);
//声明_mySecondBlock,规定了要赋给它的函数,带有两个NSInteger的参数和一个NSInteger的返回值
NSInteger(^_mySecondBlock)(NSIntegera,NSIntegerb);
NSString*(^_myThirdBlock)(NSString*str1,NSString*str2);
}
(2)实现block
//为block变量进行初始化赋值,给block赋值一个匿名函数
_myFirstBlock=^{
NSLog(@"my first block!");
};
//赋值,赋给block的函数,跟block的声明是一致的
_mySecondBlock= ^(NSIntegera,NSIntegerb){
NSLog(@"my second block!");
returna+b;
};
_myThirdBlock= ^(NSString*str1,NSString*str2){
NSLog(@"my third block!");
return[str1stringByAppendingString:str2];
};
(3)调用block
_myFirstBlock();
NSIntegersum =_mySecondBlock(1,2);
NSString*myStr =_myThirdBlock(@"test1",@"test2");