代码块概述
*Block是IOS4.0之后新增的一种语法结构也称之为“闭包(closure)”。
*SDK4.0新增的ApI大量使用了Block了。
代码块的功能
Objective-C加入了代码块的功能,它可以将一块代码当做一个对象一样对待,并且传递给其他方法或函数。代码块可以进行复用。
Block的声明
*int (^myblock)(int);
*返回值
*Myblock变量
*参数列表
Block的创建
* myblock =^(inta){
* NSLog(@"参数:%d",a);
* return 10;
* };
Block的调用
*myblock(20);
定义block类型
*typedefint (^MyBlock) (int);
*
*
*MyBlockmyblock =^(inta){
* NSLog(@"这个是block代码块:%d",a);
* return 20;
* };
*声明一个block参数
- (void)testBlock:(int (^)(int))myblock;
-(void)testBlock:(MyBlock)myblock;
调用block作为参数传递
[selftestBlock:myblock];
*变量按作用域可以分为全局变量和局部变量。
*Block代码块内可以引用这两种变量,但是它又一定的限制。
*Block引用局部变量时,该变量会作为常量编码到block中。
*局部变量需要使用__block,才能在块中修改。
*intnumber = 10;
*
* MyBlockmyblock = ^(int a){
*
* number = 20;
* number++;//错误
*
* NSLog(@"这个是block代码块:%d",a);
* return 20;
* };
*__blockintnumber = 10;
*
* MyBlockmyblock = ^(int a){
*
* number = 20;
* number++;//正确
*
* NSLog(@"这个是block代码块:%d”,number);
* return 20;
* };
*intmain(intargc,constchar *argv[]){
* NSMutableArray *mArr =[NSMutableArray
* arrayWithObjects :@"bde",@"Abc",@"aCd",@"Ebf",nil];
* [mArrsortUsingComparator:
* ^NSComparisonResult(idx,idy){
* return [x compare: y];
* }];
* for(NSString *obj inmArr){
* NSLog(@"%@",obj);
* }
*}
代码块的应用
*//动画
* [UIView animateWithDuration:0.5 animations:^{
* //主体代码
* }];
* //模态视图
* [selfpresentViewController:<#(UIViewController*)#> animated:<#(BOOL)#> completion:<#^(void)completion#>];