通知介绍
Notification:观察者模式, 通常发送者和接收者的关系是间接的多对多关系。消息的发送者告知接收者事件已经发生或者将要发送,仅此而已,接收者并不能反过来影响发送者的行为
// 发送通知用 post 接收通知用 add observer 即为监听该通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"huoying"
object:
userInfo: ];所有信息放入userInfo中// 让控制器成为监听者
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillChangeFrame:)
name:@"huoying" object:nil];
warning 一定不要忘记移除 监听者
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
通知的代码示例
person类
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
-(void)didReceiveNotification:(NSNotification *)noti;
@end
@implementation Person
-(void)didReceiveNotification:(NSNotification *)noti {
NSDictionary *dict = noti.userInfo;
Person *p = dict[@"person"];
Company *c = dict[@"company"];
NSLog(@"%@, 订阅了 %@, %@ 更新了!!!",p.name, c.name, c.videoName);
}
-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
主方法添加监听者
// 创建两个人 对象
Person p1 = [Person new];
p1.name = @"张三";
Person p2 = [Person new];
p2.name = @"李四";
// 1. 添加监听者
// 张三, 监听了 火影忍者
/
addObserver : 监听者
selector : 监听者, 所需要具有的方法, 当监听者接收到通知的时候, 会调用
name : 通知的名称
object : 消息的发送者, 可以传递为nil
*/
[[NSNotificationCenter defaultCenter] addObserver:p1
selector:@selector(didReceiveNotification:)
name:@"huoying"
object:tudouNinja];
// 李四, 监听了 屌丝男士
[[NSNotificationCenter defaultCenter] addObserver:p2
selector:@selector(didReceiveNotification:)
name:@"Diaosi"
object:nil];
发送通知
// 2. 在适当时候 , 发出通知
// 火影忍者的更新
[[NSNotificationCenter defaultCenter] postNotificationName:@"huoying"
object:tudouNinja
userInfo:@{@"person":p1, @"company": tudouNinja}];
// 屌丝男士更新
[[NSNotificationCenter defaultCenter] postNotificationName:@"Diaosi"
object:souhuDiaosi
userInfo:@{@"person":p2, @"company": souhuDiaosi}];