OC的Block学习

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

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值