iOS 通知 NSNotification
iOS 推送
iOS 消息机制
一、通知
1、基本概念
NSNotification
是iOS中一个调度消息通知的类,采用单例模式设计,在程序中实现传值、回调等地方应用很广。在iOS中,NSNotification & NSNotificaitonCenter是使用观察者模式来实现的用于跨层传递消息。
2、什么情况下使用通知
观察者模式:定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得道通知并自动更新。
二、通知的特点
是使用观察者模式来实现的用于跨层传递消息的机制;
传递方式为一对多;
三、通知的使用
1、向观察者中心添加观察者
方法1:观察者接收到通知后执行任务的代码在发送通知的线程中执行
————————————————
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSNotificationName)aName object:(nullable id)anObject;
方法2:观察者接受到通知后执行任务的代码在指定的操作队列中执行
- (id )addObserverForName:(nullable NSNotificationName)name object:(nullable id)obj queue:(nullable NSOperationQueue )queue usingBlock:(void (^)(NSNotification note))block
2、通知中心向观察者发送消息
- (void)postNotification:(NSNotification )notification;*
- (void)postNotificationName:
(NSNotificationName)aName object:(nullable id)anObject;
- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject userInfo:(nullable NSDictionary )aUserInfo;*
3、观察者接收到消息执行相应的行为
4、在通知中移除观察者
- (void)removeObserver:(id)observer;
-(void)removeObserver:(id)observer name:(nullable NSNotificationName)aName object:(nullable id)anObject;
四、如何实现通知机制
概述:首先,信息的传递就依靠通知(NSNotification),也就是说,通知就是信息(执行的方法,观察者本身(self),参数)的包装。通知中心(NSNotificationCenter)是个单例,向通知中心注册观察者,也就是说,这个通知中心有个集合,这个集合存放着观察者。发送通知需要name参数,添加观察者也有个name参数,这两个name一样的时候,当发送通知时候,观察者对象就能接收到信息,执行对应的操作。那么这个集合大概率就是NDSictionary。
————————————————
key就是name,value就是NSArray(存放数据模型),里边存放观察者对象。
当发送通知时,在通知通知的字典,根据name找到value,这个value是个数组,数组里面存放数据模型(observer、SEL),即可执行对应的行为。