《从零开始学Swift》学习笔记(Day 66)——Cocoa Touch设计模式及应用之通知机制...

原创文章,欢迎转载。转载请注明:关东升的博客 

通知(Notification)机制是基于观察者(Observer)模式也叫发布/订阅(Publish/Subscribe)模式,是 MVC模型-视图-控制器)模式的重要组成部分。 

问题提出

天气一直是英国人喜欢讨论的话题,而最近几年天气的变化也成为中国人非常关注的话题。我会根据天气预报决定是坐地铁还是开车上班,我的女儿也会根据天气预报决定明天穿哪件衣服。于是我在移动公司为我的手机定制了天气预报短信通知服务,它的工作模型如图所示。

 

 wKioL1bfu0TzXrWTAAQTti-iWOM205.jpg

 

 

每天气象局将天气预报信息投送给移动运营商,移动运营商的短信中心负责把天气预报发送给定制过这项服务的手机。

在软件系统中,一个对象状态改变也会连带影响其他很多对象的状态发生改变。能够实现这一需求的设计方案有很多,但能够做到复用性强且对象之间匿名通信的,观察者模式是其中最为适合的一个。

 

解决方案

通知机制可以实现“一对多”的对象之间的通信。如图所示,在通知机制中对某个通知感兴趣的所有对象都可以成为接收者。首先,这些对象需要向通知中心(NSNotificationCenter)发出addObserver消息进行注册通知,在投送对象通过postNotificationName消息投送通知给通知中心,通知中心就会把通知广播给注册过的接收者。所有的接收者都不知道通知是谁投送的,更不关心它的细节。投送对象与接收者是一对多的关系。接收者如果对通知不再关注,会给通知中心发出removeObserver消息注销通知,以后不再接收通知。

  

欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 wKiom1bfuv_xamxCAADC6S3kNXs690.jpg

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医学计算机应用研究的意义,医学图像感兴趣区域的自动提取-计算机应用研究.PDF...

医学图像感兴趣区域的自动提取-计算机应用研究第 12 期 何 楚等: 医学图像感兴趣区域的自动提取 157 医学图像感兴趣区域的自动提取*何 楚, 彭文敏, 李吉星, 廖孟扬( 武汉大学 电子信息学院, 湖北 武汉 430072)摘 要: 针对医学图像归档与通信系统通过视频采集和胶片扫描产生的海…

JUnit3 一次运行多个测试类和进行多次重复测试:使用测试套件和RepeatedTest

测试套件 如果测试类写到很多,每次要进行测试,难道要重新点击每一个测试类来运行?如果有200个测试类要测试呢? 为了解决这个问题,引入了测试套件(TestSuite)。 通过将多个测试放入套件中&#x…

DataGridView控件初始化,添加删除行(不绑定数据库)

转载: http://blog.163.com/zjlovety126/blog/static/2241862420106128264300/ 也不知道是否该应用这个控件,不过也想不出该用其他什么控件,关键是俺比较菜没什么经验。 要求是这样的,用户一次添加一个任务,这个任务有…

mysql 不同分区 同时insert_Mysql分区表的原理和优缺点

分区表的原理分区表是由多个相关的底层表实现,这些底层表也是由句柄对象表示,所以我们也可以直接访问各个分区,存储引擎管理分区的各个底层表和管理普通表一样(所有的底层表都必须使用相同的存储引擎),分区表的索引只是在各个底层…

计算机应用 范文,计算机应用基础(范文).doc

第 PAGE \* Arabic 1 页计算机应用基础(范文)PAGE计算机应用基础5一、单选题1、第一台电子计算机是1946年在美国研制成功的,该机的英文缩写名是_ A:ENIAC _____。2、关于计算机的分类方法有多种,下列选项中不属于按计算机处理数据的方式进行分…

架构漫谈(八):从架构的角度看如何写好代码

2016-03-03 王概凯Kevin 聊聊架构架构漫谈是由资深架构师王概凯Kevin执笔的系列专栏,专栏将会以Kevin的架构经验为基础,逐步讨论什么是架构、怎样做好架构、软件架构如何落地、如何写好程序等问题。 本文是漫谈架构专栏的第八篇,作者Kevin举例…

大理三塔,及崇圣寺里的假深沉

大理三塔,及崇圣寺里的假深沉 记得我第一次看见三塔时,是一副破败不堪的景象。而第二次来大理时,因为“崇圣寺”正在修葺,只能远远地眺望一下三塔。那时我对大理失望极了。 现在三塔修缮一新,给人耳目一新的感觉。 三塔…

WCF三种通信模式(转)

一、概述 WCF在通信过程中有三种模式:请求与答复、单向、双工通信。以下我们一一介绍。 二、请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答复后才能…

python语言打印菱形_Python打印菱形

使用python打印出菱形:*************************思想:平常我写这种代码的时候,总是自然地使用二层循环,今天老师教了一个特别好的方法,化二维为一维。我觉得代码优化是很重要的,所以把它写下来&#xff0c…

计算机软件及应用stata,蒙特卡洛模拟及其Stata应用实现

蒙特卡洛模拟及其Stata应用实现出版时间:2015年版丛编项:海南大学经济管理系列丛书内容简介《蒙特卡洛模拟及其Stata应用实现》的第1章是Stata软件基础,主要介绍了Stata软件的一些基本功能与操作。第2章介绍了Stata软件的语法结构&#xff0c…

第一个程序,Hello World

在eclipse里新建一个project,选Android-Android Project 然后Next,继续 解释一下 Package Name:这个学过编程的人都应该熟悉了,类似于namespace,你定义的所有东西都在一个包里不会和别的包出现重命名的问题等等,不多说…

Hadoop2.6集群动态添加和删除数据节点

2019独角兽企业重金招聘Python工程师标准>>> 开始之前,应该把所有新增数据节点上的Hadoop环境都配置好(如果要直接复制已经存在节点的hadoop文件夹,应该删掉里面已经产生的集群数据,比如tmp和data目录,不然…

读操作系统的设计与实现--进程互斥

1.竞争条件 当两个或多个进程读写某些共享数据时,而最后的结果取决于进程的运行顺序时,这就称为竞争条件。包含竞争条件的程序,大多数时候运行结果良好,但是往往会发生一些无法解释的结果。事实上,只要涉及到共享资源的…

拉取ftp服务器上的文件_winscp和云服务器,2步实现winscp将文件上传到腾讯云Linux云服务器...

WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议,它的主要功能就是在本地与远程计算机间安全的复制文件。与使用FTP上传代码相比,通过WinSCP可以直接使用服务器账户密码访问云服务器,无需在服务器端做任何配置。II…

计算机技术qq交流群,专业计算机群QQ

我想学习计算机的程序没什么基础 应该怎么做学什么 要怎么样才可以学好楼上的说得不对,直接学C就可以了,C不用学得太深,学些基本语法,然后转学C,因为C是面向对象的编程思想,把C的基础编程弄明白以后,可以从Visual C,C#,C。Net中选一项来学,先学些基础的,然后做些小项目,然后可以…

笔记:设计模式(3)-Abstract Factory抽象工厂模式

工厂模式的起源 1.变化点在“对象的创建”,因此就封装“对象创建”; 2.面向接口编程,依赖接口,而非依赖实现。 动机(Motivation) 在系统中,经常面临着“一系列相互以来的对象”的创建工作&#…

MongoDB操作:insert()

2019独角兽企业重金招聘Python工程师标准>>> Override public boolean inSert(String dbName, String collectionName, String[] keys,Object[] values) { DB db null; DBCollection dbCollection null; WriteResult result null; String resul…

python文件批量改名_python文件批量重命名

python文件批量重命名代码如下:# -*- coding: gbk -*-import osclass fileRename():def __init__(self, path):self.__path pathself.__order {}self.__files os.listdir(path)def list(self):return self.__filesdef presolve(self, string):for _ in string.sp…

内存管理简介之Buddy算法和slab分配

1.Buddy算法linux对空闲内存空间管理采取buddy算法,Buddy算法:把内存中所有页面按照2^n划分,其中n0~5,每个内存空间按1个页面、2个页面、4个页面、8个页面、16个页面、32个页面进行六次划分。划分后形成了大小不等的存储块&#x…

人工操作阶段计算机是如何工作的,管理信息系统作业参考答案

(一)、单项选择题1. 系统实施阶段的主要内容之一是(A)。A.系统物理配置方案的设计 B.输入设计C.程序设计 D.输出设计2. 结构化方法中,自顶向下原则的确切含义是(A)A 先处理上级机关事务,再处理下级机关事务B 先进行总体设计,后进行详细设计C …