1.什么时候广播?

NSNotificationCenter,可以形象的理解成广播,广播是一种通知模式,特点是一对多,我们通过类似建立广播的模式来告诉对象,统一来执行某项任务,这里举一个更为具体的例子,例如我们在使用聊天软件时,有一个设置使用模式的功能,当我们选择好喜欢的模板后发现,不单是选择模板页变换了格式,而是所有的软件界面都改变成了对应的格式。

2.广播的使用步骤:(分三部走)

①建立广播:设置自己的频率(name)

②用户通过调整收音机频率(name)接听广播

③关闭广播

在这里我们来实现一个改变颜色的功能

 

准备工作:

①首先在SB中生成一个Tab Bar Controller

ios 消息广播 苹果的广播_加载

②生成三个UIViewController的子类,为了方便起见,我直接设置为VC1,VC2, VC3

ios 消息广播 苹果的广播_ios 消息广播_02

③将SB中UIViewController的class分别设置为VC1,VC2, VC3

④在VC1中 添加一个Button 并在VC1的代码中添加它的点击方法。

ios 消息广播 苹果的广播_加载_03

3.代码实现

①初始化NSNotificationCenter

-(IBAction)ClickChangeColor:(id)sender{   
//postNotificationName 广播的调频赫兹
//object               要传播的内容
    [[NSNotificationCenter defaultCenter]postNotificationName:@"changename" object:[UIColor blueColor]];
}

②注册广播(分别在V1,V2,V3.m中实现代码)

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
   //name 一定要与上面的name 一致(可以理解为同一赫兹才能接听广播)
     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(ChangeColor:) name:@"changecolor" object:nil];
}
//这里传的参数一定要是NSNotification类型
-(void)ChangeColor:(NSNotification*)notification{
    self.view.backgroundColor=notification.object;
}

③关闭广播(分别在V1,V2,V3.m中实现代码)

-(void)dealloc{
//移除广播
    [[NSNotificationCenter defaultCenter]removeObserver:self];
}

注意:在这里我是用Tab Bar Controller来实现广播,但是如果按照我的方法来做,最终效果很有可能只有VC1一页完成了变色,这是因为模拟器运行时最初只生成了显示在屏幕上的第一页VC,另两页VC中的内容必须在进入了其中之后才会加载,所以如果我们没有加载另两页VC之前点击换色的按钮只有第一页变色

解决方案:模拟器运行后依次点击下面的Tab Bar Item

ios 消息广播 苹果的广播_解决方案_04

这样三页的VC就全部加载成功了,然后再点击换色按钮,就可以成功的完成变色功能了