美文网首页
iOS 通知中心(NSNotificationCenter)的基

iOS 通知中心(NSNotificationCenter)的基

作者: CJ_BLUE | 来源:发表于2017-08-08 18:32 被阅读0次

简介

通知中心(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 近距离传感器(比如设备贴近了使用者的脸部)

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

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

相关文章

网友评论

      本文标题:iOS 通知中心(NSNotificationCenter)的基

      本文链接:https://www.haomeiwen.com/subject/fycxrxtx.html