通知机制
iOS程序内部通信机制.
通知机制和委托机制不同,前者是一对多的对象之间的通信,后者是一对一的对象之间的通信
如图
在通知机制中对某个通知感兴趣的所有对象都可以成为订阅者.首先,通知中心将这些对象注册为订阅者
addObserver(observer: AnyObject, selector aSelector: Selector, name aName: String?, object anObject: AnyObject?)
通知中心就会把该通知以广播的形式发送给相应的订阅者.
postNotificationName(aName: String, object anObject: AnyObject?, userInfo aUserInfo: [NSObject : AnyObject]?)
通知中心可以取消订阅者对某通知的订阅,订阅者将不会再接收到相应的通知
removeObserver(observer: AnyObject, name aName: String?, object anObject: AnyObject?)
NSNotificationCenter与NSNotification
NSNotificationCenter类:是通知系统的中心,用于添加订阅者和发送通知给订阅者
返回当前进程的默认通知中心
public class func defaultCenter() -> NSNotificationCenter
通知中心添加订阅某通知的订阅者
public func addObserver(observer: AnyObject, selector aSelector: Selector, name aName: String?, object anObject: AnyObject?) observer:新添加的订阅者 aSelector:订阅者接收到通知后执行的方法(有且只有一个NSNotification类的参数) aName:订阅者订阅的通知的名字 anObject:通知的发布者
通知中心发送通知
public func postNotificationName(aName: String, object anObject: AnyObject?, userInfo aUserInfo: [NSObject : AnyObject]?) aName:通知的名字 anObject:通知的发布者 aUserInfo:通知的附加信息
通知中心移除订阅者对某发布者发布的某通知的订阅
public func removeObserver(observer: AnyObject, name aName: String?, object anObject: AnyObject?) observer:订阅者 aName:通知的名字 anObject:通知的发布者
NSNotification类:代表通知内容的载体,主要有三个属性
- 通知的名称
public var name: String { get }
- 通知的发布者
public var object: AnyObject? { get }
- 通知的附加信息
public var userInfo: [NSObject : AnyObject]? { get }
示例:
<pre>
<code>
`
import UIKit
class ViewController: UIViewController
{
override func viewDidLoad()
{ super.viewDidLoad() }
func didReceivedNotification(notification:NSNotification)
{
print("notification.object->\(notification.object)")
print("notification.name->\(notification.name)")
print("notification.userInfo->\(notification.userInfo)")
}
@IBAction func addOB(sender: AnyObject)
{
//通知中心添加订阅者self,订阅者self订阅 发布者为self发布的名为"我是通知名"的通知
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.didReceivedNotification(_:)), name: "我是通知名", object:self)
}
@IBAction func postNotification(sender: AnyObject)
{
//通知中心发送 发布者为self通知名为"我是通知名"的通知
NSNotificationCenter.defaultCenter().postNotificationName("我是通知名", object: self, userInfo: ["key":"value"])
}
@IBAction func removeOB(sender: AnyObject)
{
//通知中心移除订阅者对发布者是self 名为"我是通知名"的 通知
NSNotificationCenter.defaultCenter().removeObserver(self, name: "我是通知名", object: self)
}
}
`
</code>
</pre>
依次点击按钮,打印结果如下:
notification.object->Optional(<ÈÄöÁü•.ViewController: 0x7fd78bdcb2a0>) notification.name->我是通知名 notification.userInfo->Optional([key: value])
眼睛累了就养养眼吧。