美文网首页
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

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

  • oc 通知

    版本:10.0+8.0-10.08.0 AppDelegate.m AppDelegate+Notificatio...

  • NSNotication GUNStep源码

    关于iOS的通知,主要有三个类NSNotification : 通知的模型对象,存储了name:名字,object...

  • OC - 通知(一)

    导读: 一、什么是通知 二、通知的接收特点 三、通知的呈现特点 四、本地通知的创建步骤 五、远程通知的原理 一、什...

  • 杂记小知识

    获取授权通知 iOS系统版本判断 OC *Swift

  • OC中的通知

    前言 :这几天参加面试,基础方面问的比较多的就是代理、通知、block、这些。有个面试官还问到了代理和通知的区别,...

  • OC 消息发送--通知

    通知介绍 Notification:观察者模式, 通常发送者和接收者的关系是间接的多对多关系。消息的发送者告知接收...

  • oc之通知模式

    通知 iOS中的通知一般分为广播通知,本地通知和离线通知。我们这里说的就只是广播通知。 关于广播通知的理解我这里就...

  • OC扩展、代理、通知

    二、扩展 1.一般用扩展做什么? 声明私有属性,声明方法(没什么意义),声明私有成员变量 2.扩展的特点 编译时决...

  • OC - 通知(二)远程通知-极光推送

    准备: 一个Xcode工程 付费(99$)的开发者账号 真机(模拟器无法进行远程推送,因为模拟器没有UDID) 导...

网友评论

      本文标题:OC 通知 NSNotication

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