Objective-C中的设计模式--NSNotification通知
来源:互联网 发布:退伍军人召回通知软件 编辑:程序博客网 时间:2024/05/01 14:07
什么是通知?
通过学习KVO 我们发现KVO是一种简单的观察者设计模式,涉及到两个对象,分别是观察者和被观察者.这种方式实质有很大的局限性.那么OC中的”Foundstion”框架又为开发者提供了一种观察者设计模式.即通知**通知,是一种发送给一个或者多个观察者,用来通知其在程序中发生了某个事件的消息,COcoca中的通知机制遵循的就是一种广播的模式,他是一种程序中事件的发起者或者处理者和其他想要知道该事件的对象沟通的一种方式,消息的接收者,也就是观察者响应该事件来改变自己的UI,行为或者状态
在OC中,使用NSNotification类来表示一个通知**
- 建立通知的发送机制,如下:
1.注册相关的监听者,并且实现在需要的时候回调收到通知时的方法
2.在需要的时候被监听者的对象去到通知中心发送消息
3.在delloc方法里面移除通知
概念了解到这里,那么我们上代码
在main.m函数里面创建一个通知中心:
// 创建一个通知中心 单例类,拿到通知中心的单例类 NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
然后新建一个依然是我们用的万能的Student类;
在Student的.m文件中重写init方法,并且注册一个通知的监听者
#import "Student.h"@implementation Student//重写init方法-(id)init{ if (self = [super init]) {// 注册通知的监听者 /* 1.要去接收通知的对象 2.接收到某个通知要回调的相应方法 3.接收通知的名字 4.发起通知的对象,一般写nil,对于通知来说,一般不需要知道谁是通知的发起者 */ [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notificationAction:) name:@"通知名称2" object:nil]; } return self;}
重写一下,监听者监听到通知之后回调的方法
//监听到通知之后回调的方法-(void)notificationAction:(NSNotification *)notification{ NSLog(@"%@",notification.userInfo);}
最重要的一步,不要忘了移除监听者
-(void)dealloc{// 移除某个通知的监听者// [[NSNotificationCenter defaultCenter]removeObserver:self name:@"通知名称2" object:nil];// 移除所有通知的监听者 [[NSNotificationCenter defaultCenter]removeObserver:self]; NSLog(@"移除了");}
回到main.m函数中导入Student的头文件,创建对象调用并且输出
Student *stu = [Student new];
//发送通知[center postNotificationName:@"通知名称2" object:stu userInfo:@{@"center":@"MaDeZhiZhang"}];
输出结果如下:
0 0
- Objective-C中的设计模式--NSNotification通知
- Objective-C之NSNotification Center(通知中心)
- Objective-C 通知(NSNotification)及实现原理
- objective c设计模式--通知中心
- iOS中的通知(NSNotification)
- Objective-c中的单例设计模式
- Objective-c中的键值观察设计模式
- Objective-c:设计模式
- Objective-C KVC/KVO NSNotification(通知)的简单理解与应用
- Objective-C中的设计模式之单例模式
- Objective-C中的发通知的(Notification)
- Objective-C中的协议和代理(委托)设计模式
- objective c设计模式--KVO
- objective c设计模式--KVC
- 通知 NSNotification
- NSNotification通知
- NSNotification 通知
- NSnotification通知
- Python logging模块详解
- 接口和抽象类的区别
- HDU 1022 Train Problem I 简单的栈
- angularJS
- codeforces 703 C. Chris and Road
- Objective-C中的设计模式--NSNotification通知
- 王宝强案:最让人心痛的,可能还没到来!
- 一寸照片制作
- POJ 3335 Rotating Scoreboard
- 阻塞队列 BlockingQueue
- android dialog 按钮监听拦截问题
- 麻将 (Standard IO)
- adapter.notifyDataSetChanged()不起着用
- SQL执行XML编码问题