美文网首页
block用法小结

block用法小结

作者: AYuan_ | 来源:发表于2016-03-26 23:37 被阅读118次

    基本用法

    • 作用
      block用来保存一段代码
    • block的标志: ^
    • block与函数
      • block与函数很像
        1.可以保存代码
        2.有返回值
        3.有形参
        4.调用方式一样
    • Block的使用很像函数指针,不过与函数最大的不同是:Block可以访问函数以外、词法作用域以内的外部变量的值。换句话说,Block不仅 实现函数的功能,还能携带函数的执行环境

    定义block变量

    /**
    如果block没有形参,可以省略后面的()
    */
    void (^myBlock)() = ^{
         NSLog(@"------");
         NSLog(@"--------");
     };
     myBlock();
    

    定义属性block

    @property (nonatomic, copy) void (^completionClock)();
    

    带参数和返回值的block

    int sum(int a, int b)
    {
        return a + b;
    }
    
    int main()
    {
        //指向函数的指针
        int (*p)(int,int) = sum;
        int d = p(10,12);
        NSLog(@"%d",d);
        
       //OC中不常用指向函数的指针,一般用block代替
        int (^sumblock)(int, int) = ^(int a, int b) {
            return a + b;
        };
        
        int c = sumblock(11, 11);
        NSLog(@"%d",c);
    
        //用block输出n条直线
        void (^lineblock)(int) = ^(int n)
        {
            for (int i = 0; i < n; i++) {
                NSLog(@"------");
            }
        };
        myblock2(5);
        return 0;
    }
    
    

    block使用总结

    1>如何定义block变量
    int (^sumBlock)(int,int); void (^myBlock)();
    2>如何利用block封装代码

    ^(int a, int b) {
        return a - b;
    };
    ^() {
        NSLog(@"----");
    };
    ^ {
        NSLog(@"-----");
    };
    
    • block访问外部变量

      • block内部可以访问外面的变量
      • 默认情况下,block内部不能修改外面的局部变量
      • 给局部变量加上__block关键字,这个局部变量可以在block内部修改
    • 利用typedef定义block类型
      typedef int (^MyBlock)(int, int);
      以后就可以利用MyBlock这种类型来定义block变量

    MyBlock block;
    MyBlock b1,b2;
    b1 = ^(int a, int b) {
        return a + b;
    };
    MyBlock b3 = ^(int a, int b){
        return a + b;
    };
    

    相关文章

      网友评论

          本文标题:block用法小结

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