OC的Block学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoxingaiwo/article/details/81228636

先看道笔试题,注释标识的很清楚。

int val=10;
        const char *fmt="val=%d\n";
        void (^blk)(void)=^{printf(fmt,val);};//block会对变量进行一次拷贝
        val=2;//变量值得修改不会影响block中的值
        fmt="There values were changed. val=%d\n";
        blk();
        printf("%d\n",val);//再次打印的值,与block无关,值为修改之后的值。
//如果想使用block修改局部变量的值,则使用以下方法。
        __block int val2=10;
        void (^blk2)(void)=^{val2=3;printf("%d",val2);};
        blk2();

下面是Block的几种形式。

//1.返回值类型为void
        void (^blockName)(int)=^void(int a){};

        //2.参数为void
        int (^blk4)(void)=^int{return 7;};

        //3.返回值和参数都是void
        void(^blk5)(void)=^{};

        //4.匿名block
        ^int(void){return 5;};

        //使用typedef简化Block的声明
        typedef void (^blk6)(void);
        //属性:property(nonamatic,copy)blk6 imageClickBlock;

        //局部位置声明一个block属性
        void (^globalBlockInMemory)(int number)=^(int number){int a=0;};
        globalBlockInMemory(90);

猜你喜欢

转载自blog.csdn.net/xiaoxingaiwo/article/details/81228636