逆向传值之通知传值

逆向传值是一种在iOS开发中常见的数据传递技术,特别是在处理复杂的视图控制器间通信时。这个概念主要涉及苹果的UIKit框架,特别是涉及到代理模式、KVO(Key-Value Observing)或者更常使用的Notification(通知)。在这个场景下,我们讨论的是通过Notification来实现逆向传值。我们要理解什么是“逆向传值”。通常情况下,当一个视图控制器(ViewController A)启动另一个视图控制器(ViewController B)时,我们会从B向A传递数据,这被称为正向传值。然而,逆向传值是指在B完成某些操作后,将数据回传给A,而不是直接通过初始化方法或代理方法。 Notification是Objective-C和Swift中的一种广播机制,允许对象发布消息,而无需知道接收者的具体身份。在逆向传值的场景下,ViewController B可以发送一个NSNotification,而ViewController A作为观察者,监听这个通知并接收数据。实现步骤如下: 1. **注册观察者**:在ViewController A的`viewDidLoad`方法中,我们需要注册成为特定Notification的观察者。这样,当这个Notification被发布时,A就会接收到通知。注册时需要提供Notification的名字(NSNotification.Name自定义)和选择接收通知的方法。 ```swift override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(handleReceivedData(_:)), name: Notification.Name("CustomNotificationName"), object: nil) } @objc func handleReceivedData(_ notification: Notification) { //在这里处理接收到的数据} ``` 2. **发布通知**:在ViewController B中,当需要将数据回传给A时,我们可以创建一个NSNotification实例,并附带需要传递的数据。 ```swift let userInfo = ["key": "value"] //这里替换为实际要传递的数据NotificationCenter.default.post(name: .CustomNotificationName, object: nil, userInfo: userInfo) ``` 3. **移除观察者**:为了防止内存泄漏,记得在ViewController A不再需要接收通知时,比如在`deinit`或`viewWillDisappear`中移除观察者。 ```swift deinit { NotificationCenter.default.removeObserver(self) } ``` 4. **数据传递**:在`handleReceivedData`方法中,你可以通过`notification.userInfo`获取传递的数据,并进行相应的业务逻辑处理。这个HomWorkenotificationValue可能是一个练习项目,旨在让你实践这种逆向传值的方式。通过创建两个模拟的ViewController,实现数据从B到A的传递,可以加深对Notification理解和应用。逆向传值通过Notification实现,允许视图控制器间灵活的数据通信,尤其适用于不希望或无法建立强引用关系的情况。掌握这种技术对于提升iOS应用的架构设计能力非常有帮助。
zip 文件大小:34.98KB