码迷,mamicode.com
首页 > 移动开发 > 详细

iOS通知中心

时间:2016-04-15 20:20:50      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

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通知中心

标签:

原文地址:http://blog.csdn.net/it_ds/article/details/51161601

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!