您的位置:首页 > 移动开发 > IOS开发

iOS中通知和代理的区别

2015-08-26 16:54 507 查看
------共同点

利用通知和代理都能完成对象间的通信。(比如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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: