概览
通知,代理,block都用于系统回调
通知用于一对多的关系,即一个发送与多个接收
代理,block都是一对一,但是block的阅读性和效率更高
代理是用对象的地址去调用函数
Block
代码块,顾名思义,就是通过Block传入一组代码。这是一种轻量级的回调,能够直接访问上下文,使用块的地方和块的实现地方在同一个地方,使得代码组织更加连贯。
Delegate
委托或者说代理,委托是协议的一种,顾名思义,就是委托他人帮自己去做事。跟Block相比,是一个重量级的回调。方法的声明和实现分离开来,代码的连贯性不是很好,但是可以同时传递多组函数,方便在不同时候调用。
1,发送通知(带信息)
不带信息的通知选择不带userInfo参数的方法
NSDictionary *dic = [NSDictionary dictionaryWithObject:@"userInfo消息" forKey:@"param"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"noti3" object:nil userInfo:dic];
2,接受通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(noti3:) name:@"noti3" object:nil];
//接受的信息方法,注意参数是NSNotification
-(void)noti3:(NSNotification *)noti
{
//使用userInfo处理消息
NSDictionary *dic = [noti userInfo];
NSString *info = [dic objectForKey:@"param"];
NSLog(@"接收 userInfo传递的消息:%@",info);
}
3,观察者需要移除通知
-(void)dealloc
{
//移除观察者,Observer不能为nil
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
网友评论