通知中心NSNotification与委托的异同,需要注意的要点

调度表

  通知中心保存了一个调度表,表的内容包括:通知观察者(必须存在)、通知名称和通知发送者。

  通知中心的调度表给观察者指定了对应的通知集,一个通知集是通知中心发出的通知的子集。

  调度表入口有4种类型,如下表所示:

(英文版说明)


Notification name


Notification sender


Notification set specified


Specified


Specified


Notifications with a particular name from a special sender.


Specified


Unspecified


Notifications with a particular name by any sender.


Unspecified


Specified


Notifications posted by a specific sender.


Unspecified


Unspecified


All notifications.

(中文版说明)


通知名称


通知发送者


指定的通知集


已指定


已指定


指定发送者发送的特定名称的通知


已指定


未指定


任意发送者发送的特定名称的通知


未指定


已指定


指定发送者发送的所有通知


未指定


未指定


所有的通知

通知与委托的异同

  通知和委托一样,通知机制是实现应用程序中的对象间通讯的好工具。它使应用程序中的对象可以了解其它地方发生的改变。一般来说,一个对象注册为通知的观察者,是因为它希望在相应的事件发生后或者即将发生时进行调整。

  但是通知和委托之间是不同的,这些差别也导致这两种机制应该用于不同的地方。通知模型和委托模型主要区别在于前者是广播机制,而委托是一对一的关系,每种模型都有自己的优点。

通知机制的优点:

• 发出通知的对象不需要知道观察者的标识

• 任何类都可以声明通知,其实例可以发布通知

• 通知并不限于应用程序内部的通讯;通过分布式通告,一个进程可以将发生的事件通知另一个进程。

委托机制的优点:

• 委托有机会通过将值返回给进行委托的对象来影响事件;通知则更为被动,在响应事件时只能对自身及其环境产生影响。

• 委托可以影响进行委托对象对事件的处理方式(可以任意指定方法的参数列表);通知方法的签名则是固定的。

• 委托比通知更为高效

通知与KVO

  在Cocoa中,通知机制并不是观察对象状态变化的唯一选择,很多情况下甚至都不是最好的选择。KVO也可以观察其它对象的变化,在KVO中,被观察对象和观察对象直接进行通讯,不需要像通知中心这样的中间对象,因此比通知机制更为有效。

  但是在某些场合中,选择通知比KVO更为合理。比如希望观察事件,而不是对象性质的改变。

通知使用注意

  使用通知需要知道它对性能的影响。通知发出后,会通过本地的通知中心同步的派发给观察者对象。如果有很多观察者,或者每个观察者在处理通知时都要做很多工作,则程序就会有明显的延迟。因此使用通知的时候需要小心,不要过度、低效的使用通知。下面是一些使用通知用法的原则:

• 对应用程序应该观察的通知有所选择

• 注册通知时,要具体到通知的名称和发送的对象

• 尽可能高效的实现处理通告的方法

• 避免添加或移除很多观察者

通知机制中的类


类名


描述


NSNotification


通知


NSNotificationCenter


通知中心


NSDistributedNotificationCenter


分布式通知中心(Mac OS X中可以进程间通讯)


NSNotificationQueue


通知队列(通知的聚结和异步发送)

时间: 2024-08-11 14:38:32

通知中心NSNotification与委托的异同,需要注意的要点的相关文章

IOS NSNotification Center 通知中心的使用

通知中心,它是IOS程序内部的一种消息广播机制.通过它.能够实现无引用关系的对象之间的通信. 通知中心他是基于观察者模式,它仅仅能进行程序内部通信,不能跨应用程序进程通信.当通知中心接受到消息后会依据设置,将消息发送给订阅者,这里的订阅者能够有多个. 通知中心与代理模式类似,都能够实现多个对象间通信,通知中心能够将一个通知发送给多个监听者,而代理模式每一个对象仅仅能加入一个代理.但不管是那种模式,都是一种低耦合的设计,实现对象间的通信. 使用通知中心的步骤 1.注冊观察者对某个事件(以字符串命名

iOS开发-消息通知机制(NSNotification和NSNotificationCenter)

iOS中委托模式和消息机制基本上开发中用到的比较多,一般最开始页面传值通过委托实现的比较多,类之间的传值用到的比较多,不过委托相对来说只能是一对一,比如说页面A跳转到页面B,页面的B的值改变要映射到页面A,页面C的值改变也需要映射到页面A,那么就需要需要两个委托解决问题.NSNotificaiton则是一对多注册一个通知,之后回调很容易解决以上的问题. 基础概念 iOS消息通知机制算是同步的,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完

通知中心和通知

1.首先通知中心和通知是两码事. 通知中心是一个类---NSNotificationCenter,通知是另一个类---NSNotification. NSNotification是对一个通知的描述,即一个通知应该包括哪些信息.哪些行为. 通知有三个属性 @property (readonly, copy) NSString *name;通知的名字.(放假通知) @property (nullable, readonly, retain) id object;通知的发布者.(班主任) @prope

消息通知机制(NSNotification和NSNotificationCenter)

作者:FlyElephant 出处:http://www.cnblogs.com/xiaofeixiang iOS中委托模式和消息机制基本上开发中用到的比较多,一般最开始页面传值通过委托实现的比较多,类之间的传值用到的比较多,不过委托相对来说只能是一对一,比如说页面A跳转到页面B,页面的B的值改变要映射到页面A,页面C的值改变也需要映射到页面A,那么就需要需要两个委托解决问题.NSNotificaiton则是一对多注册一个通知,之后回调很容易解决以上的问题. 基础概念 iOS消息通知机制算是同步

Notification Centers 通知中心

Notification Centers 通知中心 A notification center manages the sending and receiving of notifications. It notifies all observers of notifications meeting specific criteria. The notification information is encapsulated in NSNotification objects. Client o

通知中心 - NSNotificationCenter

---恢复内容开始--- NS_ASSUME_NONNULL_BEGIN /**************** Notifications ****************/ // 通知,被发送,被接受. @interface NSNotification : NSObject <NSCopying, NSCoding> 通知的名字 @property (readonly, copy) NSString *name; 具体某一个对象. @property (nullable, readonly,

第二十六篇:通知中心 NSNotificationCenter

1.通知中心(NSNotificationCenter) ?每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 ?任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么.其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知 2.通知(NSNotification) >一个完整的通知一般包含3个属性: - (NSString*)name; // 通

iOS之NSNotificationCenter通知中心使用事项

其实这里的通知和之前说到的KVO功能很想,也是用于监听操作的,但是和KVO不同的是,KVO只用来监听属性值的变化,这个发送监听的操作是系统控制的,我们控制不了,我们只能控制监听操作,类似于Android中系统发送的广播,我们只能接受.但是通知就不一样了,他的监听发送也是又我们自己控制,我们可以在任何地方任何时机发送一个通知,类似于Android中开发者自己发送的广播.从这一点看来,通知的使用场景更为广泛了. 下面就来看一下例子: 还是护士和小孩的那个例子 Children.h [objc] vi

通知中心(NSNotificationCenter)

•通知机制 •掌握 •通知的发布 • •通知的监听 • •通知的移除 •通知中心(NSNotificationCenter) •每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 •任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么.其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知 •通知(NSNotification) •一个完整的通知