带你5分钟搞懂 block 回调

Objective-C 中的 block 是一个类似于其他语言如 swift 中的闭包的东西。掌握好 block 的使用方法,可在项目开展中得心应手,比较常用的是 block 的回调机制。下面就由具体的实例来做解析。

关于 block 的相关语法,在本文不作详细描述,但是一些比较重要的概念和用法会穿插着解释一下。

首先看一个 block 回调的具体实例:

这里写图片描述

控制器 A 中有两个控件,Label 和 Button ,Button 用于跳转至控制器 B , 控制器 B 中也有两个控件,分别是一个 Button 和一个 TextField。在控制器 B 中的文本框内输入文本,点击返回按钮后,会将输入的文本返回值控制器 A 中的 Label 上,以此便达到了回调传值的目的。一个非常简单的例子,具体的代码实现见下图:

控制器 B 代码:
这里写图片描述

控制器 A 代码:
这里写图片描述

分析:需要回调数据的是 A 视图,那么 Block 就应该在 B 中定义,用于获取传入回调数据。

控制器 B 中用 typedef 定义了 void(^) (NSString *text)的别名为 callBackBlcok 。这样我们就可以在控制器 A 中,使用这个别名定义一个 Block 类型的变量 backBlock:

#import <UIKit/UIKit.h>

typedef void(^callBackBlock)(NSString *text);

@interface BViewController : UIViewController

@property (nonatomic,strong) callBackBlock backBlock;

@end

在定义了 callBackBlock 之后,我们可以在 B 中的点击事件中添加 callBackBlock 的传参操作:

- (void)backBtnClick
{
    self.backBlock(self.textField.text);
    [self dismissViewControllerAnimated:true completion:nil];
}

这样我们就可以在想要获取数据回调的地方,也就 A 的视图中调用 block:

- (IBAction)ABtn:(UIButton *)sender {
    __weak typeof(self) weakSelf = self;
    BViewController *BVC = [[BViewController alloc] init];
    BVC.backBlock = ^(NSString *text) {
        weakSelf.ATextLabel.text = text;
    };
    [self presentViewController:BVC animated:true completion:nil];
}

通过回调将 B 中的数据传递到代码块中,并赋值给 A
中的 label,实现了整个回调过程。

需要注意的是,在上述代码中,为解决循环引用问题,通常使用弱引用。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值