通知介紹
Notification:觀察者模式, 通常發(fā)送者和接收者的關系是間接的多對多關系珠叔。消息的發(fā)送者告知接收者事件已經發(fā)生或者將要發(fā)送录豺,僅此而已紧卒,接收者并不能反過來影響發(fā)送者的行為
// 發(fā)送通知用 post 接收通知用 add observer 即為監(jiān)聽該通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"huoying"
object:
userInfo: ];所有信息放入userInfo中// 讓控制器成為監(jiān)聽者
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillChangeFrame:)
name:@"huoying" object:nil];
warning 一定不要忘記移除 監(jiān)聽者
- (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];
}
主方法添加監(jiān)聽者
// 創(chuàng)建兩個人 對象
Person p1 = [Person new];
p1.name = @"張三";
Person p2 = [Person new];
p2.name = @"李四";
// 1. 添加監(jiān)聽者
// 張三, 監(jiān)聽了 火影忍者
/
addObserver : 監(jiān)聽者
selector : 監(jiān)聽者, 所需要具有的方法, 當監(jiān)聽者接收到通知的時候, 會調用
name : 通知的名稱
object : 消息的發(fā)送者, 可以傳遞為nil
*/
[[NSNotificationCenter defaultCenter] addObserver:p1
selector:@selector(didReceiveNotification:)
name:@"huoying"
object:tudouNinja];
// 李四, 監(jiān)聽了 屌絲男士
[[NSNotificationCenter defaultCenter] addObserver:p2
selector:@selector(didReceiveNotification:)
name:@"Diaosi"
object:nil];
發(fā)送通知
// 2. 在適當時候 , 發(fā)出通知
// 火影忍者的更新
[[NSNotificationCenter defaultCenter] postNotificationName:@"huoying"
object:tudouNinja
userInfo:@{@"person":p1, @"company": tudouNinja}];
// 屌絲男士更新
[[NSNotificationCenter defaultCenter] postNotificationName:@"Diaosi"
object:souhuDiaosi
userInfo:@{@"person":p2, @"company": souhuDiaosi}];