OC 通知 NSNotication

NSNotification是OC中一个调度消息通知的类, 采用单例模式设计, 在程序中实现传值,回调等应用广泛.

OC中, NSNtification是使用观察者模式来实现跨层传递消息, 可实现解耦的目的.

NSNotificationCenter 通知中心

1. 作用: NSNotificationCenter是用来管理通知的接受和发送的. 一个对象发送通知给通知中心, 然后通知中心会将这个通知发送给观察者.

2. 使用: 一个进程(一般即指一个APP)都会有一个默认的通知中心[NSNotificationCenter defaultCenter];可获取.

NSNotificationQueue 通知队列

通知队列, 用来管理多个通知的调用(FIFO先进先出). NSNotificationQueue就行一个缓冲池, 通过特定的方式通过NSNotificationCenter发送到响应的观察者

1. 创建通知队列方法

- (instancetype)initWithNotificationCenter:(NSNotificationCenter *)notificationCenter NS_DESIGNATED_INITIALIZER;

2. 往队列加入通知(发送通知)方法

- (void)enqueueNotification:(NSNotification *)notification postingStyle:(NSPostingStyle)postingStyle; 

- (void)enqueueNotification:(NSNotification *)notification postingStyle:(NSPostingStyle)postingStyle coalesceMask:(NSNotificationCoalescing)coalesceMask forModes:(nullable NSArray *)modes;

3. 移除队列中的通知方法

- (void)dequeueNotificationsMatching:(NSNotification *)notification coalesceMask:(NSUInteger)coalesceMask;

4. 发送方式

NSPostingStyle包括三种类型:

typedef NS_ENUM(NSUInteger, NSPostingStyle) {    NSPostWhenIdle = 1,    NSPostASAP = 2,    NSPostNow = 3  };

NSPostWhenIdle:空闲发送通知,当RunLoop处于等待或空闲状态时,发送通知,对于不重要的通知可以使用。

NSPostASAP:尽快发送通知,当前RunLoop迭代完成时,通知将会被发送,有点类似没有延迟的定时器。

NSPostNow:同步发送通知,如果不使用合并通知和postNotification:一样是同步通知。

合并通知:NSNotificationCoalescing

NSNotificationCoalescing也包括三种类型:

typedef NS_OPTIONS(NSUInteger, NSNotificationCoalescing) {   

 NSNotificationNoCoalescing = 0,//不合并通知

NSNotificationCoalescingOnName = 1,//合并相同名称的通知(NSNotification的name相同)

 NSNotificationCoalescingOnSender = 2//合并同一对象的通知(NSNotificationobject相同)

};

通过合并我们可以用来保证相同的通知只被发送一次

注意事项:

1. 通知的定义最好都放在一个头文件中, 尽量规范命名, 便于取分通知目的

2. 接收通知的线程和发送通知的线程一致, 一般为主线程, 这与KVO观察者注册的线程不同

3. 通知观察者对象接收到并处理完消息后才会执行下去, 如果想异步发布通知, 使用NotificationQueue;

你可能感兴趣的:(OC 通知 NSNotication)