IOS《Block》

Block

(ios.4.0系统就开始支持Block),在编译的过程中被看成对象,他封装了一段代码,这段代码可以在任何时候执行。

在OC中通常使用block实现代理方法实现功能,也就是回调:

typedef void (^MyBlock)(int num);

@property (weak,nonatomic) MyBlock block;

-(void)setMyBlock:(void(^)(int num))block;

//实现
-(void)setMyBlock:(void(^)(int num))block{
    
    if(block){
        self.block = block;
    }
}

也可以作为方法直接回调--返回值(和上述同一概念,编译过程看成对象):

// 通用基础文件(作为网络请求)
-(void)post:(NSString *)url parameters:(NSDictionary *)parameters dataModel:(Class)dataModel successHandler:(void(^)(id model))successBlock errorHandler:(void(^)(NSString *code,NSString *message))errorBlock;

通过上面两段代码,我们现在统一一下block的定义格式

返回值类型(^block变量名)(形参列表) = ^(形参列表){};

block可大致分为3中类型:

1.无参数无返回值:

//无参数,无返回值的Block
-(void)No_ParametersAndReturnValues_Block{
    
    void (^emptyBlock)() = ^(){
        NSLog(@"无参数,无返回值的Block");
    };
    emptyBlock();
}

2.有参数无返回值:

//有参数,无返回值的Block
-(void)HaveParameters_NoReturnValues_Block{
    
    void (^HpNrBlock)(int,int) = ^(int a,int b){
        NSLog(@"%d + %d = %d",a,b,a+b);
    };
    HpNrBlock(5,5);
}

3.有参数有返回值:

//有参数,有返回值的Block
-(void)Have_ParametersAndReturnValues_Block{
    
    int multiplier = 7 ;
    int (^HpHrBlock)( int ) = ^( int num){
        return num * multiplier;
    };
    NSLog(@"%d" , HpHrBlock( 3 ));
    //结果会打印出21
}

PS:__block是一种特殊类型,使用该关键字声明的局部变量,可以被block所改变,并且其在原函数中的值会被改变。

以上都是很常见的Block使用方法和格式。

补充一下第一个结合typedef使用的Block吧:

在ViewControllerB中定义一个Block(带参数,无返回值):

VB.h:

typedef void(^colorBlock)(id);

@interface ViewControllerB : UIViewController

@property (copy,nonatomic) colorBlock colors;

VB.m:

UIColor *color = [UIColor redColor];
self.colors(color);

VC.m:

ViewControllerB *VCB = [[ViewControllerB alloc]init];
    VCB.colors = ^(UIColor *color){
        self.view.backgroundColor = color;
    };

在VB中定义一个Block类型,用定义的类型去创建Block,上述事例是Block回调修改上一个界面的背景颜色,控制器VC跳转到控制器VB,然后在控制器VB触发事件回调修改控制器VC的背景颜色。

关于Block的其他修饰和使用范畴在这里就没有过多的深究了。

                                                  -----辉小鱼                                                  

 

posted @ 2016-09-07 10:20  辉小鱼  阅读(131)  评论(0编辑  收藏  举报