block使用心得

刚开始接触block的时候感觉很迷茫,这样怪异的语法让我摸不着头脑,硬着头皮去尝试消化这种新语法,发现记住了过了几天又忘了,反反复复。这次痛下决心想要彻底弄会block的常用用法,所以记录一下。

简书上对block的用途是这样说的:Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。


两种用途:1.两个界面之间传值(有点类似代理,其实block就是为取代代理而生的,哈哈);2.封装代码段当做参数使用。


第一种:假设一种场景:B界面需要传值给A界面,我们需要这么做:首先在B界面定义一个block :

typedef void(^changeColor)(id);

申明block变量

@property(nonatomic,copy) changeColor change;

然后再需要.m界面使用这个属性:

-(IBAction)back:(id)sender{

    UIColor * color = [UIColor redColor];

    self.change(color);

}


在A界面需要调用B的block函数:

-(IBAction)nextPage:(id)sender{

    BViewController * bview = [self.storyboard instantiateViewControllerWithIdentifier:@"nextView"];

    //实现BviewController属性change的内容

    //BviewController 调用change的时候会执行回调函数

    bview.change = ^(UIColor * color){

        self.view.backgroundColor = color;

    };

     [self.navigationController pushViewController:bview animated:YES];

}


这样就实现了B页面向A页面的传值。

第二种:
这种的使用场景是在A界面调用B的方法,等这个方法执行完了再执行A的函数块,一般用于耗时的操作,得到结果之后回调,这个方式使用很简单,首先在B类定义方法(以block为参数):

-(void)Block:(void(^)(UIColor *))block;


.m文件实现此方法

-(void)Block:(void(^)(UIColor *))block{

    block([UIColor redColor]);

}

然后就是A类调用此方法了:

bview.change = ^(UIColor * color){

        self.view.backgroundColor = color;

    };


以上就是我对block简单使用的肤浅理解,希望大神多多指正,感激不尽。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值