------共同点
利用通知和代理都能完成对象间的通信。(比如A对象告诉D对象发生了什么事情,A对象传递数据给D对象)
------不同点
代理:只能是一对一的关系(一个对象只能告诉另外一个对象发生了什么事情)
通知:多对多关系(一个对象能告诉N个对象发生了什么事情,一个对象能得知N个对象发生了什么事情)
------------------------------------------------------------------------------------------------------------------------------------------------------------
通知的一个简单示例:
//
// main.m
// notice
//
// Copyright (c) 2015年 juanjuan. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
#import "NewsCompany.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//1.初始化机构
NewsCompany *tx = [[NewsCompany alloc] init];
tx.name = @"腾讯新闻";
NewsCompany *sina = [[NewsCompany alloc] init];
sina.name = @"新浪新闻";
//2.初始化三个人
Person *zhangsan = [[Person alloc] init];
zhangsan.name = @"张三";
Person *lisi = [[Person alloc] init];
lisi.name = @"李四";
Person *wangwu = [[Person alloc] init];
wangwu.name = @"王五";
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
//3.注册通知的监听器(即能监听通知)
// 添加监听器
//张三只接收腾讯的军事新闻
[center addObserver:zhangsan selector:@selector(newsCome:) name:@"junshi_news_come" object:tx];
[center addObserver:wangwu selector:@selector(newsCome:) name:@"yule_news_come" object:sina];
//4.模拟发布新闻
//tx发布了一则军事新闻,名字是junshi_news_come
[center postNotificationName:@"junshi_news_come"
object:tx
userInfo:@{@"title":@"伊拉克战争停止了",
@"intro":@"伊拉克战争。。。。。。。。。"}];
[center postNotificationName:@"yule_news_come"
object:sina
userInfo:@{@"title":@"啊呜啊呜啊呜",
@"intro":@"----================。。。。。。。。。"}];
//最后一定要移除下监听
}
return 0;
}