iOS学习记录-设计模式-观察者模式

观察者模式

iOS开发中常用到的2种观察者模式方法:

1.通知模式:

  • 通知中心:整个模式的核心,Cocoa程序有默认通知中心,单例模式实现,通常无需自己创建;不同进程间使用NSDistributedNotificationCenter对象;
  • 观察者:在通知中心注册,接收通知的对象;
  • 被观察者:需要检测的对象,调用addObserver:selector:name:object:addObserverForName:object:queue:usingBlock:添加观察者和相应处理方法等
  • 通知:封装了对象消息的对象;
  • 通知中心以广播形式发出通知,对于所有通知名相同的观察者都发出通知;首先筛选注册通知名与通知相同的观察者,并存入数组,完成筛选后,对该数组遍历调用注册的selector:performSelector:  withObject: ,参数便是通知对象;
  • 通知的观察者要是没有从通知中心移除便被销毁了或者没有实现相应的selector都会导致崩溃;

2.KVO:

  • KVO是Cocoa的基本功能,是应用内对象间的通信方法,在NSObject类中实现;
  • KVO针对被观察对象的属性(Property);
  • 被观察对象属性发生变化时观察者会被通知到;
  • 被观察者和观察者之间的对应关系可1对1 ,也可1对多;
  • 添加观察者addObserver:forKeyPath:options:context:方法调用这为被观察者;
  • 观察者对象实现:observeValueForKeyPath:ofObject:change:context:实现得到通知后的动作;
  • 手动发送还是自动发送:automaticallyNotifiesObserversForKey:重写来决定是否自动发送
  • 手动设置属性前,调用- willChangeValueForKey: 和设置后调用- didChangeValueForKey:,这之后便会通知到观察者;
  • 观察者应该被装入被观察者对象的一个可变数组中保存,因此,如果在观察者dealloc之前没有被移除,若发送通知则因为野指针而发生EXC_BAD_ACCESS错误;
  • 与通知中心广播模式不同,KVO被观察者直接通知观察者,直接调用注册的selector便可;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值