第一、通知中心,通知中心有两种方法,一种是发布通知,一种是订阅通知,必须先订阅通知,
再发布通知
NSNotificationCenter *center =[NSNotificationCenter
defaultCenter];
第二、订阅通知
JSPerson *mj = [[JSPerson alloc] init];
mj.name = @"lmj";
JSPerson *nj = [[JSPerson alloc] init];
nj.name = @"lnj";
//必须现有订阅者
//observer 通知的订阅者
//aSelector 接收到通知后做的事情
//aName 要接收的通知的名称,如果为nil 则接收所有
通知
//anObject 发布者,接收谁发布的通知,如果为nil接收
所有人发布的通知
[center addObserver:mj selector:
@selector(niuNaiComing:)name:@"mainiumaile" object:nil];
第三、发布通知
//现有订阅者,再发布通知
//发布通知 sanyuan 通知的发布者
[centerpostNotificationName:@"mainiumaile"
object:sanyuanuserInfo:@{@"tx":@"好牛奶在三元"}];
[centerpostNotificationName:@"mainiumaile"
object:sanluuserInfo:@{@"tx":@"毒牛奶在三鹿"}];
//noti.object 通知的发布者
//noti.userInfo 发送者给接受者发送的信息
//noti.name 通知的名称
- (void)niuNaiComing:(NSNotification *)noti
{
//noti.name; //收到的通知的名称
JSCompany *com = noti.object; //通知的发布者
NSLog(@"%@",com.name);
//noti.userInfo; //发布通知的时候发送的额外信息
userInfo:
//NSLog(@"%@",noti);
NSLog(@"%@",noti.userInfo[@"tx"]);
}
第四、在通知的接收者中处理通知的消息
A09-通知机制
2014年10月17日 星期五 16:30
分区 第八天(QQ聊天) 的第 11 页
}
- (void)dealloc
//在arc中不能,也不用调用[superdealloc];
{
/在监听者的dealloc方法中,
//取消订阅
//必须取消监听,否则,当通知再次出现,通知中心任然回向该监
听者发送消息
//因为对象已经释放,所以可能会导致崩溃
[[NSNotificationCenter defaultCenter]
removeObserver:self];
}
第五、当订阅者销毁,也要取消订阅通知,否则可能会出现野指针错误;
代理和通知都能完成对象之间的通信(A对象告诉B对象发生了什么,A对象传递数
据给B对象)
第六、通知和代理的区别
(1)、相同点
代理: 1对1( 1个对象,只能告诉另一个对象发生了什么)
通知:多对多( 1个对象可以通知多个对象, 1个对象可以订阅多个对象发布的通
知)