iOS 通知中心(NSNotificationCenter)的基本使用

简介

通知中心(NSNotificationCenter), 是IOS程序内部的一种消息广播机制, 通过它可以完成不同对象之间的通信。如果我们想把消息从A传递到B, 那么通知中心的两端就是发送者A和接收者(也就是观察者)B, 两者通过通知中心就可以完成通信。

通知中心的3个属性

@property (readonly, copy) NSNotificationName name;
//通知的唯一标识,用于辨别是哪个通知。
@property (nullable, readonly, retain) id object;
//指定接收消息的对象,为nil时消息传递给所有监听该消息的对象,否则只有指定对象可以接收消息。
@property (nullable, readonly, copy) NSDictionary *userInfo;
//传递给监听者的消息内容,字典类型。

通知的使用

1. 监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(aAction:) name:@"name" object:nil]; 
// 如果发送的通知指定了object对象,那么只有添加观察者时设置的object对象与其一样的观察才能接收到通知,但是接收通知如果将这个参数设置为了nil,则会接收一切通知。
2. 发送通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"name" object:nil userInfo:@{@"key":@"value"}];
// 观察者的SEL函数指针可以有一个参数,参数就是发送的消息对象(NSNotification)本身,可以通过这个参数取到消息对象的userInfo,实现传值。
3. 通知方法的实现
- (void)aAction:(NSNotification *)not
{
    NSLog(@"%@", not.userInfo);
}
4. 最后需要移除通知
[[NSNotificationCenter defaultCenter] removeObserver:self];

这样一个简单的通知就写完,这种通知是我们自己声明,自己监听的,iOS内部还有一些系统的通知,我们只需要监听就可以了,举个栗子:

//增加监听,当键弹出时收出消息
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];
    
    //增加监听,当键退出时收出消息
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];

//然后实现方法就可以了
- (void)keyboardWillShow:(NSNotification *)aNotification
{
    
}
- (void)keyboardWillHide:(NSNotification *)aNotification
{
    
}

最后附上iOS中常用的系统通知

// 键盘
UIKeyboardWillShowNotification  键盘即将显示
UIKeyboardDidShowNotification  键盘显示完毕
UIKeyboardWillHideNotification  键盘即将隐藏
UIKeyboardDidHideNotification  键盘隐藏完毕
UIKeyboardWillChangeFrameNotification  键盘的位置尺寸即将发生改变
UIKeyboardDidChangeFrameNotification  键盘的位置尺寸改变完毕
// 设备
UIDeviceOrientationDidChangeNotification 设备旋转
UIDeviceBatteryStateDidChangeNotification 电池状态改变
UIDeviceBatteryLevelDidChangeNotification  电池电量改变
UIDeviceProximityStateDidChangeNotification 近距离传感器(比如设备贴近了使用者的脸部)

另外还有许多,想拍照,视频,滑动等,只需要看系统包都能找到(不行还有浏览器呢)

结语:限于水平,本文只写了一些基本用法和注意事项,如果文中存在错误请指出,我会及时修改。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知...
    莫离_焱阅读 11,589评论 1 8
  • 好多年前我看过一句话:“这是个饿死诗人的年代。”其实饿死的远不止诗人,比如还有古玩、古钱币收藏者。 我外公就是个古...
    广播大头阅读 3,051评论 0 0
  • 倾城倾国
    明仔望山阅读 2,905评论 3 4
  • 在知乎上看到一个关于前端工具的归纳,觉得不错,所以自己搜集好,保存到简书上面,提醒自己还有哪些没有尝试过。 nod...
    drunkcat2020阅读 1,657评论 0 0
  • 我希望有个如你一般的人。 如这山间清晨一般明亮清爽的人, 如奔赴古城道路上阳光一般的人, 温暖而不炙热,覆盖我所有...
    造梦安提阅读 4,574评论 1 2