iOS开发之NSNotification

NSNotification:一个对象能够给其他任意数量的对象广播信息。对象之间可以没有耦合关系。

上一次,我们分享了有关 KVO 的内容,但 KVO 只是一对一的关系,如果要用到一对多的关系的时候,该怎么办呢?这个时候就可以用到NSNotification(通知)

1、NSNotification 的基本知识

相关类:
1、NSNotification(通知):封装了要广播的信息。
2、NSNotificationCenter(通知中心):管理注册接收消息对象,广播消息。
3、observer(观察者):需要监测广播信息的对象,即接收信息的对象。

2、NSNotification 的基本用法

下面举一个例子,来说明NSNotification的用法:
创建两个UIViewController:
在 viewController_01.m 中:

- (void)viewDidLoad {
    [super viewDidLoad];
    //  接收信息对象在通知中心注册,包括:信息名称、接收信息时的处理方法
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeTheme:) name:@"change" object:nil];
}

    //  实现注册的方法
- (void)changeTheme:(NSNotification *)sender {
    self.view.backgroundColor = sender.userInfo[@"color"];
}

在 viewController_02.m 中:

- (void)viewDidLoad {
    [super viewDidLoad];
    //  接收信息对象在通知中心注册,包括:信息名称、接收信息时的处理方法
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeTheme:) name:@"change" object:nil];
}

    //  实现注册的方法
- (void)changeTheme:(NSNotification *)sender {
    self.view.backgroundColor = sender.userInfo[@"color"];
}

在 viewController_03.m 中:

//  创建 viewController_03.m 的 Button 对应的方法
- (IBAction)changedColor:(UIButton *)sender {
    //  给已注册对象,发送消息,这里是一键修改背景颜色
    [[NSNotificationCenter defaultCenter] postNotificationName:@"change" object:nil userInfo:@{@"color": [UIColor lightGrayColor]}];
}

** 点击viewController_03里的button,viewcontroller_01和viewController_02的backgroundColor就会改变**

通过NSNotification,可以很容易的完成一对多的消息发送!

推荐阅读更多精彩内容