iOS通知中心

Posted 欣麒骥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS通知中心相关的知识,希望对你有一定的参考价值。

ios开发中的传送消息机制总的来说细分为三大类:

  • 本地通知

  • 推送通知

  • 通知中心

三者之间并没有什么直接性质的联系,通知中心是向应用程序中注册某个观察者的所有对象广播消息,通过通知中心可以很好的协调不同对象之间的消息通信。

注意:

每一个应用程序都有且只有一个通知中心(NSNotificationCenter)实例

代理和通知中心都是协调各个对象之间进行消息通信,通知中心在功能上与代理有些类似,二者在选择时有什么区分?

代理对应的关系的一对一的关系,而通知是一对多的关系,所以在遇到需要一处改变引起多出
变化的功能上我们最好选择通知。

例如 :

  1. QQ音乐App上换皮肤效果

  2. 读书软件改变字体大小效果

在实际开发中合理的使用二者,防止大材小用

一个通知成功实施的必有要三要素

  1. 通知发布者

  2. 通知中心

  3. 通知接收者

一个完整通知包含三个属性

  1. name:通知的名称

  2. object:通知的发布者

  3. userInfo:通知者给通知接收者的信息内容

通知接收者向通知中心注册通知方法

- (void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSString *)aName object:(nullable id)anObject;  

observer:监听器,即谁要接收这个通知

aSelector:收到通知后,回调监听器的这个方法,并且把通知对象当做参数传入

 aName:通知的名称。如果为nil,那么无论通知的名称是什么,监听器都能收到这个通知 

anObject:通知发布者。如果为anObject和aName都为nil,监听器都收到所有的通知

通知中心发布通知的三种方法

• - (void)postNotification:(NSNotification *)notification;

• - (void)postNotificationName:(NSString *)aName object: (id)anObject;

• - (void)postNotificationName:(NSString *)aName object:(id)anObject
userInfo:(NSDictionary *)aUserInfo;

通知下的dealloc方法

我们在通知中心注册完后,通知中心是非常灵敏的,当条件被触发后就会不断的向注册者发送消息,但当我们的注册者已经被释放了,这时候就会造成野指针,引发程序崩溃,所以在我们对象被释放的时候,应该把该对象向通知中心注册的通知释放掉。

    - (void)dealloc
    
        [[NSNotificationCenter defaultCenter] removeObserver:self];
     

另外取消注册的方法有两个:

- (void)removeObserver:(id)observer;

- (void)removeObserver:(id)observer name:(nullable NSString *)aName object:(nullable id)anObject;
//第二个多了一个name的参数可以具体到该对象中某个通知

通知中心的常见的实际应用

1. 设备旋转

    UIDeviceOrientationDidChangeNotification

2. 键盘操作

UIKeyboardWillShowNotification // 键盘即将显示 

UIKeyboardDidShowNotification // 键盘显示完毕 

UIKeyboardWillHideNotification // 键盘即将隐藏 

UIKeyboardDidHideNotification // 键盘隐藏完毕 

UIKeyboardWillChangeFrameNotification // 键盘的位置尺寸即将发生改变 

UIKeyboardDidChangeFrameNotification // 键盘的位置尺寸改变完毕 

提醒

通知的正常执行的顺序为:接收者在通知中心注册通知——>通知者在通知中心发布通知———>释放通知中心的注册通知。顺序出错将会产生错误。

以上是关于iOS通知中心的主要内容,如果未能解决你的问题,请参考以下文章

打开另一个通知时,如何防止通知从通知中心消失? iOS

iOS中通知中心NSNotificationCenter应用总结

iOS------通知代理kvo 详解

iOS NSNotificationCenter详解

无法接收来自通知中心的通知

ios - 应用程序关闭时本地通知不更新徽章编号