NSNotificationCenter的设计模式

iOS设计模式之观察者模式


上一阵子去cvte比试ios试题,被问到NSNotificationCenter的设计模式是什么顿时蒙了。笔试后恶补了一番,发现自己会的东西仍然很少,固在这里总结一下。

(一) IOS开发中的几种设计模式

要知道NSNotificationCenter的设计模式,首先要了解IOS开发中首先有哪几种设计模式,总结一下一共有6种,分别是:

  1. 代理模式
  2. 观察者模式
  3. MVC模式
  4. 单例模式
  5. 策略模式
  6. 工厂模式
    具体介绍我就不详细说明了,自行百度也能知道,我提供一个链接:IOS开发中的几种设计模式介绍,这里有相关的介绍。
(二)观察者模式

理解
NSNotificationCenter属于观察者模式,至于什么是观察者模式,我理解就像微博那样,例如我对iOS很感兴趣,因此我去注册了某个iOS协会组织,一旦该协会有什么动态就马上给我发邮件通知我,这样我就能马上知道iOS最近有什么新消息。这就是观察者模式。

实现方式
而NSnotificationCenter则是以NSNotificationCenter为中心,观察者往Center中注册对某个主题对象的变化感兴趣,主题对象通过NSNotificationCenter进行变化广播。所有的观察和监听行为都向同一个中心注册,所有对象的变化也都通过同一个中心向外广播。

概括
SNotificationCenter就像一个枢纽一样,处在整个观察者模式的核心位置,调度着消息在观察者和监听者之间传递。

实现过程涉及的对象

  1. 观察者Observer
    一般继承自NSObject,通过NSNotificationCenter的addObserver:selector:name:object接口来注册对某一类型通知感兴趣.在注册时候一定要注意,NSNotificationCenter不会对观察者进行引用计数+1的操作,我们在程序中释放观察者的时候,一定要去报从center中将其注销
  2. 通知中心NSNotificationCenter,通知的枢纽。
  3. 主题对象,被观察的对象,过postNotificationName:object:userInfo:发送某一类型通知,广播改变。

实例代码

观察者页面(并带有发现变化后的操作)

@interface OneViewController ()
@end

@implementation OneViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myNotification:) name:@"test1" object:nil];
    /*上面代码的意义的为:观察者 self 在收到名为 @"test1" 的事件就执行 myNotification 方法,最后一个参数是表示会对哪个发送者对象发出的事件作出响应,nil 时表示接受所有发送者的事件。*/
}

- (void)myNotification:(NSNotification *)n 
{ 
    //从接受到的消息n中,取出object,即消息中加载的参数
    NSArray *arr = [n object];
    NSLog(@"%@",arr);
} 

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"test1" object:nil];
    //将观察者从NotificationCenter 中移除掉
}

@end

被观察者页面( 激发事件,即通知相应的观察者 )

@interface TwoViewController ()
@end

@implementation TwoViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"test1" 
              object:nil];
}
@end

总结
观察者模式的NSNotificationCenter理解的差不多了,之后打算看看KVO的写法,因为在IOS中典型的推模型实现方式为NSNotificationCenter和KVO。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值