带你5分钟搞懂 block 回调
来源:互联网 发布:alias是什么软件 编辑:程序博客网 时间:2024/05/15 08:36
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,实现了整个回调过程。
需要注意的是,在上述代码中,为解决循环引用问题,通常使用弱引用。
- 带你5分钟搞懂 block 回调
- 【前端知识点】promise简书-30分钟带你搞懂promise面试必备
- 5分钟让你搞懂量子计算
- 带你搞懂onInterceptTouchEvent和onTouchEvent
- Bootstrap的基本使用方法,5分钟帮你搞懂怎么用
- Bootstrap的基本使用方法,5分钟帮你搞懂怎么用
- 5分钟搞懂后缀数组
- 5分钟搞懂字节对齐
- 5分钟搞懂Android DeepLink
- 5分钟带你了解什么是MEMS
- 5分钟带你了解什么是Git
- 5分钟带你入门CSS3
- 5分钟带你入门Redis
- 5分钟带你看懂JAVA多线程
- 5分钟带你入门Redis
- 一篇文章带你搞懂DEX文件的结构
- 带你搞懂朴素贝叶斯分类算法
- 带你搞懂朴素贝叶斯分类算法
- 使派生类构造函数变得简洁优雅
- Spring Security基于数据库配置权限(角色,路径)
- 时间服务器中,适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位
- 【线程的同步与互斥 (互斥量 条件变量 信号量)】生产者与消费者模型
- 全面解析Linux 内核 3.10.x
- 带你5分钟搞懂 block 回调
- Tensorflow中使用TFRecords高效读取数据--结合NLP数据实践
- 实现SpringMVC中使用@Responsebody注解返回任意POJO对象转换成JSON
- 写于面试前的一段话
- 全面解析Linux 内核 3.10.x
- (7) JDBC的ResutSet对象
- OCR算法:车牌识别在停车系统中的工作原理
- Kotlin官方参考整理——01.开始
- 蓝桥杯篇3