简介
通知中心(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 近距离传感器(比如设备贴近了使用者的脸部)
另外还有许多,想拍照,视频,滑动等,只需要看系统包都能找到(不行还有浏览器呢)
结语:限于水平,本文只写了一些基本用法和注意事项,如果文中存在错误请指出,我会及时修改。