澳门新萄京官方网站 1

看一遍就会哦!

嘿嘿,在来一张横屏的。

最近又干回了我的老本行 –
iOS,感觉自己的逻辑思维比以前严密了许多,但是也发现有很多知识没有掌握牢靠。在使用NSNotification时竟发现有些手生,赶紧抽时间整理一波,授人玫瑰,手有余香。
本文内容参考自官方API
Reference

澳门新萄京官方网站 2

通知

Notification就是一个消息通知机制,类似广播。观察者向消息中心注册感兴趣的东西,当感兴趣的东西发出这个消息的时候,观察者就能接受到通知,然后去做相对应的事情。使用消息通知可以起到多个对象之间解耦的作用。苹果封装了常用的一些通知,比如窗口获得焦点、网络连接关闭等事件信息等。当然,我们也可以自定义个性化的通知。
通知中心,就是分发这些通知的地方,Cocoa框架中有两种通知中心:

  • NSNotificationCenter 单进程通知管理
  • NSDistributedNotificationCenter 一台机器中多个进程的通知管理

正如我们所看到的,Android 支持分屏应用。

NSNotificationCenter

每个进程都包含一个默认的通知中心,这个通知中心是一个单例,通过[NSNotificationCenter
defaultCenter]来获取。

通知中心将通知分发给观察者处理采用了同步机制,即当某一个通知被发送时,会一直阻塞在发送方法内,直到通知中心将该通知分发给注册过的观察者并且观察者完成了相应的处理之后,发送者才能继续执行其所在线程内的后续代码。如果要使用异步机制发送通知,文章后面会讲到“通知队列”,即第二种通知中心。

开发以来,感觉通知常用的场景有两个:

  1. 当前页面给上一个页面传值。
  2. 当一个值发生改变时,相应的对象作出相应的操作。

澳门新萄京官方网站 3

创建通知

- (instancetype)initWithName:(NSNotificationName)name object:(nullable id)object userInfo:(nullable NSDictionary *)userInfo;
+ (instancetype)notificationWithName:(NSNotificationName)aName object:(nullable id)anObject;
+ (instancetype)notificationWithName:(NSNotificationName)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;

这三个方法都能成功的创建一个通知,然而创建通知并不是必要的操作,因为在发送通知时,可以包含通知的各项参数。但是单独讲一下可以加深理解嘛。ʘʚʘ
从上面三个方法可以看出,一个通知包含以下几个参数:

  • name:通知的名字,是通知能够被接收到的关键因素。
  • object:通知发送者希望发送给观察者的一个对象,通常为通知发送者自己。
  • userInfo:一个字典,是通知发送者传递给观察者的参数。

还有可调整的Activity。这将允许他们来决定应用程序的可能尺寸。显然,这里还有类似iOS
9的选项卡模式。

发布通知

- (void)postNotification:(NSNotification *)notification;
- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject;
- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;

澳门新萄京官方网站,第一个方法适用于发布已经通过NSNotification创建好的通知,其余两个方法就在发布通知的时候,写入了通知的具体参数。

网站地图xml地图