通知机制与委托机制不同的是,前者是“一对多”的对象之间的通信,后者是“一对一”的对象之间的通信。
NSNotificationCenter是单例模式,创建和获得实例的方法是defaultCenter,
1.定义一个通知消息到来时要执行的方法:
-(void)printMessage{
NSLog(@"messageName");
}
2.注册观察者:
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(printMessage) name: @"messageName" object:nil];
}
defaultCenter:消息中心只有一个,通过类方法获取它的单例
addObserver:添加监听者实例,此处为当前实例
selector:observer中的一个方法指针,当有消息的时候会执行此方法,并把相关上下文以参数传递过去
name:注册监听消息的名称
object:这个是对消息发送方的一个过滤,此参数据说明当前监听器仅对某个对象发出的消息感兴趣
3.推送通知:
-(void)push
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"messageName" object:nil];
}
postNotificationName:推送消息的名称
object:发送消息的实例
4.移除观察者:
-(void)remove
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"messageName" object:nil];
}
通知带NSDictionary
1.定义一个通知消息到来时要执行的方法:
-(void)printMessageName:(id)sender{
NSString *name = [[sender userInfo] objectForKey:@"MessageName"];
NSLog(@"messageName:%@", name);
}
2.注册观察者:
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(printMessage) name: @"messageName" object:nil];
}
defaultCenter:消息中心只有一个,通过类方法获取它的单例
addObserver:添加监听者实例,此处为当前实例
selector:observer中的一个方法指针,当有消息的时候会执行此方法,并把相关上下文以参数传递过去
name:注册监听消息的名称
object:这个是对消息发送方的一个过滤,此参数据说明当前监听器仅对某个对象发出的消息感兴趣
3.推送通知
-(void)push
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"messageName" object:nil userInfo:[NSDictionary dictionaryWithObject:@"Message" forKey:@"messageName"]];
}
postNotificationName:推送消息的名称
object:发送消息的实例
userInfo:发送消息时附带一个NSDictionary
4.移除观察者:
-(void)remove
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"messageName" object:nil];
}