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 // 键盘的位置尺寸改变完毕 

提醒

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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值