通知有四步走:
1、发送通知:
创建通知的时候有两种情况:(发送通知:调用观察者处的方法)
(1)
- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject;
参数说明:
postNotificationName:通知的名字,也是通知的唯一标示,编辑器就通过这个找到通知。这个名字和接收通知的名字要对应相同
object:传递的参数
(2)- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;
参数说明:
postNotificationName:通知的名字,也是通知的唯一标示,编辑器就通过这个找到通知,这个名字和接收通知的名字要对应相同object:传递的参数(任何类型都可以)
userInfo:传递的参数(一点要字典格式)
示例:
NSDictionary *callbackDic = @{@"userId":@"JDD",@"token":@"sdkjhgoaslforejfdsankjjas",@"type":@"3",@"code":@1};
[[NSNotificationCenter defaultCenter]postNotificationName:@"giveDic" object:@"haha" userInfo:callbackDic];
2、接收通知:(注册通知:即要在什么地方接收通知)
接收通知的时候,如果需要传递具体的信息内容,则方法名后面要跟着:,如果不需要传递具体的信息内容,怎不需要有:。
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSNotificationName)aName object:(nullable id)anObject;
参数说明:
addObserver:观察者,即在什么地方接收通知
selector:收到通知后调用何种方法
name:通知的名字,也是通知的唯一标示,编辑器就通过这个找到通知的。
示例:
//接收通知
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(receiveDic:) name:@"giveDic" object:nil];
3、处理通知事件:
#pragma -mark 处理通知事件
- (void)receiveDic:(NSNotification *)info {
NSLog(@"userInfo----%@",info.userInfo);//获取传递信息的字典
NSLog(@"object-----%@",info.object);//获取传递的对象
}
4、释放通知:
(1)释放所有的观察者
- (void)removeObserver:(id)observer;
参数说明:
removeObserver:观察者,即在什么地方接收的通知
(2)通过name单个释放
- (void)removeObserver:(id)observer name:(nullable NSNotificationName)aName object:(nullable id)anObject;
参数说明:
removeObserver:观察者,即在什么地方接收的通知
name:通知的名字,也是通知的唯一标示,编辑器就通过这个找到通知的。
示例:
- (void)dealloc {
//释放通知
[[NSNotificationCenter defaultCenter]removeObserver:self name:@"giveDic" object:nil];
}
-----------------------------分割线-----------------------------
以上记录了我目前对NSNotification的理解,如有不当之处,还请大侠们指正,帮助我成长,谢谢。