美文网首页
OC 通知 NSNotication

OC 通知 NSNotication

作者: mikey_Jiang | 来源:发表于2020-12-14 15:25 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/glhvgktx.html