消息机制 NSNotificationCenter 一直都在频繁使用,但是却对其原理不是十分了解。今天就花些时间,把消息机制原理重头到尾好好过一遍。
iOS 提供了一种 "同步的" 消息通知机制,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完全解耦。
这种消息通知机制可以应用于任意时间和任何对象,观察者可以有多个,所以消息具有广播的性质,只是需要注意的是,观察者向消息中心注册以后,在不需要接受消息时需要向消息中心注销,这种消息广播机制是典型的“Observer”模式。
这个要求其实也很容易实现. 每个运行中的application都有一个NSNotificationCenter的成员变量,它的功能就类似公共栏. 对象注册关注某个确定的notification(如果有人捡到一只小狗,就去告诉我). 我们把这些注册对象叫做 observer. 其它的一些对象会给center发送notifications(我捡到了一只小狗). center将该notifications转发给所有注册对该notification感兴趣的对象. 我们把这些发送notification的对象叫做 poster
消息机制常常用于在向服务器端请求数据或者提交数据的场景,在和服务器端成功交互后,需要处理服务器端返回的数据,或发送响应消息等,就需要用到消息机制。
使用消息机制的步骤:
1. 观察者注册消息通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getUserProfileSuccess:) name:@"Notification_GetUserProfileSuccess" object:nil];
notificationObserver 观察者 : self
notificationSelector 处理消息的方法名: getUserProfileSuccess
notificationName 消息通知的名字: Notification_GetUserProfileSuccess
notificationSender 消息发送者 : 表示接收哪个发送者的通知,如果第四个参数为nil,接收所有发送者的通知
2. 发送消息通知
//UserProfile Is A Model
//@interface UserProfile : NSObject
[[NSNotificationCenter defaultCenter] postNotificationName:@"Notification_GetUserProfileSuccess" object:userProfile userInfo:nil];
notificationName 消息通知的名字: Notification_GetUserProfileSuccess
notificationSender 消息发送者: userProfile
3. 观察者处理消息
复制代码
复制代码
- (void) getUserProfileSuccess: (NSNotification*) aNotification
{
self.userProfile = [aNotification object];
lblName.text = self.userProfile.Name;
lblEENO.text = self.userProfile.EENO;
lblNric.text = self.userProfile.NRIC;
lblBirthday.text =self.userProfile.Birthday;
lblHireDate.text = self.userProfile.Hiredate;
txtMobilePhone.text = self.userProfile.Mobile;
txtEmail.text = self.userProfile.Email;
}
复制代码
复制代码
NSNotification 接受到的消息信息,主要含:
Name: 消息名称 Notification_GetUserProfileSuccess
object: 消息发送者 userProfile
userInfo: 消息传递的数据信息
4. 观察者注销,移除消息观察者
虽然在 IOS 用上 ARC 后,不显示移除 NSNotification Observer 也不会出错,但是这是一个很不好的习惯,不利于性能和内存。
注销观察者有2个方法:
a. 最优的方法,在 UIViewController.m 中:
-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
If you see the method you don't need to call [super dealloc]; here, only the method without super dealloc needed.
b. 单个移除:
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"Notification_GetUserProfileSuccess" object:nil];
分享到:
相关推荐
这个`ios-对NSNotificationCenter的封装.zip`文件提供了一个针对NSNotification的封装,目的是简化使用过程,增强代码的可读性和可维护性。下面将详细解释封装的几个核心方面。 首先,`添加观察者`是NSNotification...
iOS中的NSNotification中心是一个重要的通信机制,它允许对象间进行松耦合的消息传递。NSNotification与Delegate都是iOS中常见的消息传递方式,它们各有特点和适用场景。 首先,我们来看看NSNotification和Delegate...
这个机制允许对象发送消息给其他对象,而无需知道接收者的具体身份,从而实现了松耦合的设计。本文将深入探讨iOS的通知机制,包括本地通知(Local Notification)和远程通知(Remote Notification,也称为推送通知...
在iOS开发中,通知代理是实现对象间通信的重要机制,主要分为两个方面:NSNotificationCenter和Delegate。这两种方式都允许一个对象监听并响应其他对象的事件,但它们各自有其特性和适用场景。 首先,我们来详细...
在iOS开发中,通知代理是实现对象间通信的重要机制,主要分为`NSNotificationCenter`和`Delegate`两种方式。本文将深入探讨这两种技术,并提供一个`DelegateDemo`实例来帮助理解。 首先,我们来看`NSNotification`...
`NSNotificationCenter` 是苹果 macOS 和 iOS 开发中的一个关键组件,属于Foundation框架的一部分,它提供了一个广播消息机制,使得对象可以在不直接引用彼此的情况下进行通信。这个机制被称为“观察者模式”或...
这个名为“IOS中消息传递的8种方式Demo”的项目旨在提供一个全面的实践示例,帮助开发者了解并掌握在iOS环境中各种通信机制。以下将详细介绍这8种消息传递方式,并结合实际应用进行解析。 1. **Delegation(代理)*...
代理模式允许一个对象代表另一个对象执行某些操作,是iOS中的核心通信机制。例如,UITableViewDataSource和UITableViewDelegate,用于填充和处理表格视图的行为。 4. **观察者模式(Observer)**: 观察者模式...
标题 "网络连接 与 NSNotificationCenter" 涉及到的是iOS开发中的两个核心概念:网络状态监测和应用程序的通知中心机制。这篇博文可能讨论了如何利用苹果的 Reachability 框架来检测设备的网络状态,并结合 ...
在iOS中,NSNotificationCenter就是观察者模式的一个实现,用于对象间的通信,例如,当用户改变设备的横竖屏时,可以通知相关组件进行布局更新。 除此之外,书中可能还会涵盖其他设计模式,如工厂模式、建造者模式...
NSNotification允许对象发送消息(被称为通知)到其他对象,而无需直接知道接收者的身份。这种机制使得代码更加灵活,易于维护,并且支持事件驱动的编程模型。接下来,我们将深入探讨NSNotification的使用,包括其...
- NSNotificationCenter:了解如何发布和接收NSNotification进行事件传递。 9. **图片加载与缓存**: - SDWebImage库:学习集成第三方库,实现网络图片的加载和缓存。 10. **权限管理**: - 获取用户权限:如...
在本示例中,我们可能使用UITableView来展示聊天记录,因为它的可滚动特性和单元格重用机制非常适合这种场景。 1. **设置UITableView**: 创建一个UITableView,并在其代理方法中定义单元格的高度和内容。对于聊天...
在iOS开发中,Notification是一种非常重要的通信机制,它允许应用程序的不同组件之间相互通信,而无需直接耦合。本文将详细讲解iOS中的Notification机制,以及如何在iOS 5中使用Notification进行参数传递。 首先,...
Notification使用的关键是利用ios的消息中心,发送消息通知,观察者接收到消息通知,执行对应的方法。NSNotificationCenter 较之于 kvo 可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信。
在iOS中,NSNotificationCenter是负责发布和接收通知的中心类。当一个对象想要广播一个事件或者状态改变时,它会向通知中心发布一个通知,而其他对象可以注册成为监听这个通知的观察者。通知有两种类型:本地通知...
在iOS开发中,NSNotificationCenter是Objective-C和Swift中用于对象间通信的重要机制。它提供了一种松耦合的方式,让对象可以在不直接引用彼此的情况下传递信息。本DEMO旨在通过实例来详细介绍如何使用...
第三,**通知中心(NotificationCenter)**是iOS提供的广播机制,用于在对象间发送和接收消息。通过`NSNotificationCenter`,任何对象都可以注册监听特定的通知,当某个事件发生时,所有注册了该通知的接收者都会...