通知的使用:
一个对象发送一个通知,另一个对象接收到通知后执行相应的事情
分3步
1、增加观察者(说明对什么消息敏感)
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(getMsg:) name:@"myInfo" object:nil];
2、完成回调(收到消息做什么)
- (void)getMsg:(NSNotification *)notice
{
//解析通知的消息
NSDictionary *dict = notice.userInfo;
NSLog(@"Msg Rev:%@",dict[@"msg"]);
}
3、发送通知
NSDictionary *dict = @{@"msg":@"hello"};
NSNotification *notification = [NSNotification notificationWithName:@"myInfo" object:nil userInfo:dict];
[[NSNotificationCenter defaultCenter] postNotification:notification];
使用起来还是比较方便的,和代理有什么区别呢?
代理更强一些,关系是是双向的。
区别一:delegate针对one-to-one关系,并且reciever可以返回值给sender;notification 可以针对one-to-one/many/none,reciever无法返回值给sender;所以,delegate用于sender希望接受到reciever的某个功能反馈值,notification用于通知多个object某个事件。
区别二:
Delegate:消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然后发送者响应事件,delegate机制使得接收者可以改变发送者的行为。通常发送者和接收者的关系是直接的一对多的关系。
Notification:
消息的发送者告知接收者事件已经发生或者将要发送,仅此而已,接收者并不能反过来影响发送者的行为。通常发送者和接收者的关系是间接的多对多关系。
区别三:效率肯定是delegate比nsnotification高。
区别四:delegate方法比notification更加直接,最典型的特征是,delegate方法往往需要关注返回值,也就是delegate方法的结果。
delegate用于声明委托。Notification用于通告。委托是一种引用类型,引用类型的 Shared 方法或对象的实例方法。任何具有匹配参数类型和返回类型的过程均可用来创建此委托类的实例。然后就可以通过委托实例来调用过程。