iOS通知中心

简介: 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开发 - 千万不要把通知注册写在viewWillAppera里面
iOS开发 - 千万不要把通知注册写在viewWillAppera里面
93 0
|
iOS开发
iOS代理 通知 block传值的规范写法
iOS代理 通知 block传值的规范写法
139 0
|
iOS开发
iOS本地推送通知的基本使用
简单介绍iOS的本地通知推送的基本使用步骤
1255 0
|
iOS开发
iOS 通知多线程的使用
iOS 通知多线程的使用
249 0
|
图形学 iOS开发
Unity 之 记录打包IOS首次安装启动弹窗通知权限问题
IOS应该如何去掉首次进程序的获取权限确认框。
741 0
Unity 之 记录打包IOS首次安装启动弹窗通知权限问题
|
iOS开发
iOS中使用本地通知为你的APP添加提示用户功能(二)
iOS中使用本地通知为你的APP添加提示用户功能
279 0
|
iOS开发
iOS中使用本地通知为你的APP添加提示用户功能(一)
iOS中使用本地通知为你的APP添加提示用户功能
202 0
|
iOS开发 开发者 编译器
iOS开发--通知,代理,KVO的区别,以及通知的多线程问题
1. delegate 当我们第一次编写ios应用时,我们注意到不断的在使用“delegate”,并且贯穿于整个SDK。delegation模式不是IOS特有的模式,而是依赖与你过去拥有的编程背景。针对它的优势以及为什么经常使用到,这种模式可能不是很明显的。