美文网首页
Block(回调函数)

Block(回调函数)

作者: 橙子遇到八哥 | 来源:发表于2020-03-18 15:04 被阅读0次

    概念:Block就是一个函数体(匿名函数),它是ObjC对于闭包的实现,在块状中我们可以持有或引用局部变量

    Block访问外部变量
    1)Block内部可以访问外部变量;
    2)默认情况下,Block内部不能修改外部的局部变量
    3)给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改。

    1. 声明

    返回类型 (^block函数名)(参数类型1 变量1, 参数类型2 变量2, ...);
    void (^func)();
    int (^add)(int, int);
    int (^minus)(int, int);
    

    2. 定义

    typedef void(^KCButtonClick)(KCButton *);
    @property (nonatomic,copy) KCButtonClick onClick;
    
    int (^add)(int, int) = ^(int a, int b){
        return a + b;
    };
    
    等同于
    
    int (^add)(int, int);
    add = ^(int num1, int num2){
        return num1 + num2;
    };
    

    3. 实例/使用

    void testBlock(){
        //调用方式1:定义后直接调用
        NSLog(@"add:%d", add(1,2));
        
        //调用方式2:先声明,后定义后调用
        minus = ^(int a, int b){
            return a - b;
        };
        NSLog(@"minus:%d", minus(10, 6));
        
        //调用方式3:不声明,直接调用匿名函数
        NSLog(@"multi:%d", ^(int a, int b){
            return a * b;
        }(3,4));
    }
    

    4. 扩展typedef

    声明:typedef 返回类型 (^block变量)(参数类型1, 参数类型2, ...);
    举例:

    typedef float (^Divide)(int, int);
    
    //调用方式3:使用typedef 进行定义后调用
    Divide div = ^(int a, int b){
      return (float)a/b;
    };
    NSLog(@"div:%f", div(1,2));
    

    相关文章

      网友评论

          本文标题:Block(回调函数)

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