美文网首页
Block - block简单的使用

Block - block简单的使用

作者: lionsom_lin | 来源:发表于2017-04-18 19:55 被阅读20次

    参考文档

    一、忘记block格式?

    • 样例一.png
    • 样例二.png

    二、Block的定义

    1、无参数无返回值
    //1,无参数,无返回值,声明和定义
    void(^MyBlockOne)(void) = ^(void){
     
    NSLog(@"无参数,无返回值");  
     
    };  
    MyBlockOne();//block的调用
    
    2、有参数无返回值
    //2,有参数,无返回值,声明和定义
     
    void(^MyblockTwo)(int a) = ^(int a){
     
    NSLog(@"@ = %d我就是block,有参数,无返回值",a);
     
      };  
    MyblockTwo(100);
    
    3、有参数有返回值
    //3,有参数,有返回值
     
    int(^MyBlockThree)(int,int) = ^(int a,int b){    
     
      NSLog(@"%d我就是block,有参数,有返回值",a + b);returna + b; 
     
     };  
    MyBlockThree(12,56);
    
    4、无参数有返回值(很少用到)
    //4,无参数,有返回值
     
    int(^MyblockFour)(void) = ^{NSLog(@"无参数,有返回值");
            return45;
      };
    MyblockFour();
    
    5、实际开发中常用typedef 定义Block

    例如,用typedef定义一个block:

      typedef int (^MyBlock)(int , int);
    

    这时,MyBlock就成为了一种Block类型
    在定义类的属性时可以这样:

      @property (nonatomic,copy) MyBlock myBlockOne;
    

    使用时:

    self.myBlockOne = ^int (int ,int){
        //TODO
    }
    

    三、block的使用

    1、block作为对象的属性

    第一步:写一个简单的block

    //写一个block  inlineblock
    void(^LXBlock)() = ^() {
        NSLog(@"aa");
    };
    //调用这个block
    LXBlock();
    

    第二步:创建一个Person对象类,并创建一个属性block

    @interface Person : NSObject
    
    /* block : ARC使用strong  非ARC使用copy  */
    @property (nonatomic, strong) void(^block)();
    
    @end
    

    第三步:创建Person对象,并将block赋值给他的属性

    Person * p = [[Person alloc]init];
    p.block = LXBlock;
    

    第四步:调用这个Person对象的属性

    _per.block();
    

    2、block作为方法的参数

    第一步:接着上面的Person.h类中,声明创建eat方法

    //参数是一个block
    //block的返回值:void  参数:NSString *  名字:block
    -(void)eat:(void(^)(NSString *))block;
    

    第二步:在Person.m中实现

    -(void)eat:(void (^)(NSString *))block {
        block(@"参数");
    }
    

    第三步:调用

    Person * p1 = [[Person alloc]init];
    [p1 eat:^(NSString * s) {
        NSLog(@"%@",s);
    }];
    

    3、block作为返回值

    第一步:在Person.h中声明run

    -(void(^)(int))run;
    

    第二步:在Person.m中实现

    -(void(^)(int))run{
        return ^(int m) {
            NSLog(@"哥们起来了!!== %d",m);
        };
    }
    

    第三步:调用

    //3.block作为返回值
    Person * p = [[Person alloc]init];  
    p.run(10);
    

    整个Person类以及调用

    Person.h

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    /* block : ARC使用strong  非ARC使用copy*/
    @property (nonatomic, strong) void(^block)();
    
    -(void)eat:(void(^)(NSString *))block;
    
    -(void(^)(int))run;
    
    @end
    

    Person.m

    #import "Person.h"
    
    @implementation Person
    
    -(void)eat:(void (^)(NSString *))block {
        block(@"参数");
    }
    
    -(void(^)(int))run{
        return ^(int m) {
            NSLog(@"哥们起来了!!== %d",m);
        };
    }
    
    @end
    

    调用

    - (void)myblock {
        //写一个block  inlineblock
        void(^LXBlock)() = ^() {
            NSLog(@"aaa");
        };
    
        LXBlock();
        
        //1.block作为对象的属性
        Person * p = [[Person alloc]init];
        p.block = LXBlock;
        _per = p;
        
        //测试
        _per.block();
    }
    
    -(void)myblock_2 {
        //2.block作为方法参数
        Person * p1 = [[Person alloc]init];
        [p1 eat:^(NSString * s) {
            NSLog(@"%@",s);
        }];
    }
    
    -(void)myblock_3 {
        //3.block作为返回值
        Person * p = [[Person alloc]init];
        p.run(10);
    }
    

    完!

    相关文章

      网友评论

          本文标题:Block - block简单的使用

          本文链接:https://www.haomeiwen.com/subject/njeqzttx.html