NSNotification通知的使用

来源:互联网 发布:部队网络安全管理 编辑:程序博客网 时间:2024/05/21 17:53

第一、通知中心,通知中心有两种方法,一种是发布通知,一种是订阅通知,必须先订阅通知,

再发布通知

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个对象可以订阅多个对象发布的通

知)

0 0
原创粉丝点击