Swift - 使用NSNotificationCenter发送通知,接收通知
转载自:http://www.mamicode.com/info-detail-1069228.html
标签:
这里所说的通知不是指发给用户看的通知消息,而是系统内部进行消息传递的通知。要介绍通知之前,我们需要先了解什么是观察者模式。
观察者模式 (Observer):指一个对象在状态变化的时候会通知另一个对象。参与者并不需要知道其他对象的具体是干什么的 。这是一种降低耦合度的设计。常见的使用方法是观察者注册监听,然后在状态改变的时候,所有观察者们都会收到通知。
Cocoa 使用两种方式实现了观察者模式: 一个是 Key-Value Observing (KVO),另一个便是本文要讲的Notification。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import UIKitclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let notificationCenter = NSNotificationCenter.defaultCenter() let operationQueue = NSOperationQueue.mainQueue() let applicationDidEnterBackgroundObserver = notificationCenter.addObserverForName(UIApplicationDidEnterBackgroundNotification, object: nil, queue: operationQueue, usingBlock: { (notification: NSNotification!) in print("程序进入到后台了") }) //如果不需要的话,记得把相应的通知注册给取消,避免内存浪费或奔溃 //notificationCenter.removeObserver(applicationDidEnterBackgroundObserver) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }} |
3,使用自定义的通知
--- ViewController.swift ---
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import UIKitclass ViewController: UIViewController { let observers = [MyObserver(name: "观察器1"),MyObserver(name: "观察器2")] override func viewDidLoad() { super.viewDidLoad() print("发送通知") NSNotificationCenter.defaultCenter().postNotificationName("DownloadImageNotification", object: self, userInfo: ["value1":"hangge.com", "value2" : 12345]) print("通知完毕") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }} |
--- MyObserver.swift ---
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
import UIKitclass MyObserver: NSObject { var name:String = "" init(name:String){ super.init() self.name = name NSNotificationCenter.defaultCenter().addObserver(self, selector:"downloadImage:", name: "DownloadImageNotification", object: nil) } func downloadImage(notification: NSNotification) { let userInfo = notification.userInfo as! [String: AnyObject] let value1 = userInfo["value1"] as! String let value2 = userInfo["value2"] as! Int print("\(name) 获取到通知,用户数据是[\(value1),\(value2)]") sleep(3) print("\(name) 执行完毕") } deinit { //记得移除通知监听 NSNotificationCenter.defaultCenter().removeObserver(self) } } |
运行结果如下:
观察器1 获取到通知,用户数据是[hangge.com,12345]
观察器1 执行完毕
观察器2 获取到通知,用户数据是[hangge.com,12345]
观察器2 执行完毕
通知完毕
Swift - 使用NSNotificationCenter发送通知,接收通知的更多相关文章
- android 同时发送几条通知
android 同时发送几条通知 ======= 下面是转载的文章. 同时发送几条通知把ID添加,接收的时候找到这个id就可以出来多条了. 还是不太明白或者编码实现不了的可以加我QQ. 博客很少上 ...
- 转:向IOS设备发送推送通知
背景 SMS 和 MMS 消息是由无线运营商通过设备的电话号码向特定设备提供的.实现 SMS/MMS 的服务器端应用程序的开发人员必须费大量精力才能与现有的封闭电信基础架构进行交互(其中包括获取电话号 ...
- [Apple开发者帐户帮助]六、配置应用服务(5.3)推送通知(APN):从您的Web服务器发送推送通知
要使用APN从Web服务器向macOS用户发送推送通知,请注册网站推送标识符并创建网站推送证书. 对于每个网站,请注册一个网站推送标识符,用于验证通知是否来自您的服务器.然后创建一个网站推送证书以签署 ...
- XMPP系列(四)---发送和接收文字消息,获取历史消息功能
今天开始做到最主要的功能发送和接收消息.获取本地历史数据. 先上到目前为止的效果图: 首先是要在XMPPFramework.h中引入数据存储模块: //聊天记录模块的导入 # ...
- Java邮件发送与接收原理
一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...
- (转载)JavaWeb学习总结(五十一)——邮件的发送与接收原理
博客源地址:http://www.cnblogs.com/xdp-gacl/p/4209586.html 一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电 ...
- JavaWeb学习总结(五十一)——邮件的发送与接收原理
一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...
- DICOM医学图像处理:DIMSE消息发送与接收“大同小异”之DCMTK fo-dicom mDCM
背景: 从DICOM网络传输一文开始,相继介绍了C-ECHO.C-FIND.C-STORE.C-MOVE等DIMSE-C服务的简单实现,博文中的代码给出的实例都是基于fo-dicom库来实现的,原因只 ...
- 使用JavaMail发送和接收电子邮件
一. 为什么要学习JavaMail 为什么要学习JavaMail开发? 如今非常多WEB应用在开发时都须要集成邮件发送功能.比如: 1. 给新注冊的用户自己主动发送一封包括其注冊信息的欢迎E-Mail ...
随机推荐
- 用PyInstaller把Python代码打包成单个独立的exe可执行文件
之前就想要把自己的BlogsToWordpress打开成exe了.一直没去弄. 又看到有人提到python打开成exe的问题. 所以打算现在就去试试. 注:此处之所有选用BlogsToWordpres ...
- 关于dll的路径问题
最近在做一个sdk二次开发的项目,具体是将一个C++开发的SDk用C#将它的API接口全部封装一遍,然后再做一个demo就好了 好不容易封装完了,在使用的时候出了问题.原来SDK中的dll老是加载不到 ...
- .NET文件上传的大小限制配置
<system.web> <!--maxRequestLength单位是Kb--> <httpRuntime maxRequestLength="20971 ...
- Unity3d:加载Gif格式图片
unity里不支持Gif格式的图片,网上搜索也没有相关资料,殊不知我们已经太相信度娘了,而没有了自己的分析,我们知道Gif图是由多个静态图做成的,那我们就回归本土,第一步:把gif拆成n个静态图放在集 ...
- Delphi ThreadPool 线程池(Delphi2009以上版本适用)
http://blog.sina.com.cn/s/blog_6250a9df0101kref.html 在网上查找Delphi线程池,结果发现寥寥无几. 看了半天源代码,弄得一头雾水,觉得不容易理解 ...
- ITEXT学习手册
本系列内容来自<iText in Action 2nd>,希望有时间的读者能够自己读一遍这本书 所有的文章相关的例子:IText.7z ITEXT基础 ITEXT学习手册——创建一个简单的 ...
- java android ExecutorService 线程池解析
ExecutorService: 它也是一个接口,它扩展自Executor接口,Executor接口更像一个抽象的命令模式,仅有一个方法:execute(runnable);Executor接口简单, ...
- C++ 名称空间
在程序中,只使用 using namespace std; 而不使用其他的名称空间,如using namespace boost; 这样的好处有: 1.可以避免不同名称空间中的名称冲突: 2.可以很清 ...
- Swift - 本地消息的推送通知(附样例)
使用UILocalNotification可以很方便的实现消息的推送功能.我们可以设置这个消息的推送时间,推送内容等. 当推送时间一到,不管用户在桌面还是其他应用中,屏幕上方会都显示出推送消息. 1, ...
- iOS开发——UI篇Swift篇&UITabBarController
UITabBarController class UITabBarControllerController: UIViewController { var titleString:String! @I ...