Objective-C中的老板是这样发通知的(Notification)
通知(Notification)简单的类比一下,公司的老总给下面的员工发通知啦,说明天公司要上市,各部门做一下准备工作。等通知发完,各部门收到后各司其职,做着自己该做的东西。假如Boss是通过公司的内部论坛发送的通知,那么Boss就是发送通知的对象,而公司员工就是通知的接受方,而公司的内部论坛就是通知中心,员要想接收到Boss发送的通知的前提是先在论坛上注册一下。老板只有一个,而接受通知的有多个部门,老板是通过论坛广播的形式发送的通知。说的高大上一点,通知是一种发送给一个或多个观察着,用来通知其在程序中发生了某个事件的消息。Cocoa中的通知及时遵循的是一种广播的模式。
暂且这么类比着,这是根据我个人理解而想出的例子,可能会有不足之处,希望大家批评指正,转载请注明出处。
废话少说,我们如何把上面boss通过论坛发帖的形式来发送通知用Objective-C中的Notification来实现呢,代码走起
1.一个公司得有老板对吧,所以我们要新建一个老板类,公司的内部论坛就是我们OC中的通知中心(NotificationCenter),看完老板的实现代码在说两句吧
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@implementation Boss-(void)sendMessage{ //把要发送的信息放入字典中(boss要在论坛中说的话) NSDictionary *message = @{@"notification" : @"大家注意啦,明天公司上市!"}; //创建通知对象(老板登陆boss账号) NSNotification * notification = [NSNotification notificationWithName:@"boss" object:self userInfo:message]; //向通知中心发送消息(发布消息) [[NSNotificationCenter defaultCenter] postNotification:notification]; }@end |
代码说明:
1.老板要发的消息要放在字典中才能发布,字典的key是帖子的主题,value是帖子的内容
2.创建通知对象就好比老板登陆内部论坛,用notificationWithName设置老板的昵称
3.向通知中心发送消息就是老板发帖啦
2.下面我们就开始模拟各个部门接受通知后要做的事情,人力资源部接到通知后要做的事儿
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
@implementation HumanResources- (instancetype)init{ self = [super init]; if (self) { //现在通知中心注册,确定要接受谁的消息,(登陆论坛,关注老板) [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doSomething:) name:@"boss" object:nil]; } return self;}-(void)doSomething:(NSNotification *)notification{ //接受消息,(从论坛上看到啦boss的消息) NSDictionary *bossInfo = [notification userInfo]; //输出收到的信息 NSLog(@"人力资源部门收到:%@", bossInfo[@"notification"]);}@end |
代码说明:
1.注册为观察者相当于各部门要在内部论坛注册并关注老板,在关注老板的同时指定当老板发送通知时自己要做些什么事儿
2.doSomething里是各部门要做的事情
3.再添加一个财务部,和上面的代码类似,在这就不写了
4.在main函数里做如下的测试
|
1
2
3
4
5
|
Boss * boss = [[Boss alloc] init];Finance * finance = [[Finance alloc] init];HumanResources *hr = [[HumanResources alloc] init];//老板发消息啦[boss sendMessage]; |
当老板发通知时,各部门会自动调取自动执行的方法,运行结果如下:
|
1
2
|
2014-08-20 15:10:29.816 Memory[1946:303] 财务部门收到:大家注意啦,明天公司上市!2014-08-20 15:10:29.817 Memory[1946:303] 人力资源部门收到:大家注意啦,明天公司上市! |
最后呢,也是最重要的,登录完论坛如果你不使用了,要注销也就是要退出。那么通知也是一样的,你需要在dealloc方法中移除观察者即可。
上面的总结暂且这么说吧,是根据笔者自己的理解所总结的内容,不免有偏颇之处,欢迎批评指正,转载请注明出处。
Objective-C中的老板是这样发通知的(Notification)的更多相关文章
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- 理解Objective C 中id
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...
- objective C中的字符串NSStirng常用操作
objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的 ...
- Android开发 ---xml构建选项菜单、上下文菜单(长按显示菜单)、发通知、发送下载通知
1.activity_main.xml 描述: 定义了一个TextView和三个按钮 <?xml version="1.0" encoding="utf-8&quo ...
- Objective C中的ARC的修饰符的使用---- 学习笔记九
#import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...
- Objective - C中属性和点语法的使用
一.属性 属性是Objective—C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现能在一定程度上简化程序代码,并且增强实例变量的访问安全性 ...
- 点击datalist中Button按钮出现“回发或回调参数无效......”
遇到问题: 回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page ...
- 如何Vue-cli开始使用在Vue.js项目中启动TDD(测试驱动开发)
通常,使用测试驱动开发(TDD)最困难的部分是开始.你必须下载带有奇怪依赖项的软件包,让测试套件与你的构建系统协同工作,然后你必须弄清楚如何编写一个测试!难怪这么多的开发者在你提起它的时候就开始跑开了 ...
- Objective C中数组排序几种情况的总结
总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 数组排 ...
随机推荐
- JavaScript_js模拟键盘输入
function fireKeyEvent(el, evtType, keyCode) { var evtObj; if (document.createEvent) { if (window.Key ...
- Python 爬虫5——爬取并下载网页指定规格的图片
看完上篇文档之后,我们对于正则表达式已经有了基本的了解,其实学习最有效的办法就是带着问题和目的,这里我们假设有一个目标:获取某个网页上指定规格的图片的链接地址,并下载到本地. 一.实现步骤: 1.在浏 ...
- Python之路第一课Day9--随堂笔记之二(进程、线程、协程篇)
本节内容 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queu ...
- Java实现文件在某个目录的检索
package com.filetest; import java.io.File; import java.util.Date; import java.util.Scanner; public c ...
- IOS第四天-新浪微博 -存储优化OAuth授权账号信息,下拉刷新,字典转模型
*************application - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...
- 总结Objective-c常用算法
今天是星期天,想睡到10点起床,结果认为自己太奢侈了,不能这么做,于是把闹钟设置成了6:30:结果终于9:36醒了,起床,无缘无故迟了,好吧,就算太累了吧,周天就原谅自己一回.终于到了中午 ...
- SQL Server CheckPoint的几个误区
有关CheckPoint的概念对大多数SQL Server开发或DBA人员都不陌生.但是包括我自己在内,大家对于CheckPoint都或多或少存在某些误区,最近和高文佳同学(感谢高同学的探讨) ...
- 搭建Linux+Jexus+MariaDB+ASP.NET[LJMA]环境
备注:,将我的博客内容整理成册,首先会在博客里优先发布,后续可能的话整理成电子书,主要从linux的最基础内容开始进入Linux的Mono开发方面的话题.本文是我整理博客内容的一篇文章. LJMA 是 ...
- Reactive Extensions(Rx) 学习
Bruce Eckel(著有多部编程书籍)和Jonas Boner(Akka的缔造者和Typesafe的CTO)发表了“反应性宣言”,在其中尝试着定义什么是反应性应用. 这样的应用应该能够: 对事件做 ...
- CSP的今世与未来
一.从两个工具说起 最近Google又推出了两款有关CSP利用的小工具,其一为CSP Evaluator,这是一个能够评估你当前输入的CSP能否帮助你有效避免XSS攻击的工具,其用法非常简单,在输入框 ...