1.效率肯定是delegate比nsnotification高。
2. delegate方法比notification更加直接,最典型的特征是,delegate方法往往需要关注返回值,也就是delegate方法的结果。比如-windowShouldClose:,需要关心返回的是yes还是no。所以delegate方法往往包含should这个很传神的词。也就是好比你做我的delegate,我会问你我想关闭窗口你愿意吗?你需要给我一个答案,我根据你的答案来决定如何做下一步。相反的,notification最大的特色就是不关心接受者的态度,我只管把通告放出来,你接受不接受就是你的事情,同时我也不关心结果。所以notification往往用did这个词汇,比如NSWindowDidResizeNotific<wbr>ation,那么nswindow对象放出这个notification后就什么都不管了也不会等待接受者的反应。</wbr>
简明概要的说明了KVO和NSNotification的区别:
和delegate一样,KVO和NSNotification的作用也是类与类之间的通信,与delegate不同的是1)这两个都是负责发出通知,剩下的事情就不管了,所以没有返回值;2)delegate只是一对一,而这两个可以一对多。这两者也有各自的特点。
1)KVO的使用:
被观察者发出<wbr><strong>addObserver:forKeyPath:options:context:<wbr></wbr></strong>方法来添加观察者。</wbr>
然后只要被观察者的keyPath值变化(注意:单纯改变其值不会调用此方法,只有通过getters和setters来改变值才会触发KVO),就会在观察者里调用方法observeValueForKeyPath:ofObject:change:context:
因此观察者需要实现方法<wbr><strong>observeValueForKeyPath:ofObject:change:context:<wbr></wbr></strong>来对KVO发出的通知做出响应。</wbr>
这些代码都只需在观察者里进行实现,被观察者不用添加任何代码,所以谁要监听谁注册,然后对响应进行处理即可,使得观察者与被观察者完全解耦,运用很灵活很简便;但是KVO只能检测类中的属性,并且属性名都是通过NSString来查找,编译器不会帮你检错和补全,纯手敲所以比较容易出错。
2)NSNotification的使用
这里的通知不是由被观察者发出,而是由NSNotificationCenter来统一发出,而不同通知通过唯一的通知标识名notificationName来区分,标识名由发送通知的类来起。
首先被观察者自己在必要的方法A里,通过方法postNotificationName:object:来发出通知notificationName这样发送通知者这边的工作就完成了,每次A被调用,就会发送一次通知notificationName。
然后谁要监听A的变化,就通过[NSNotificationCenterdefaultCenter]的方法addObserver:selector:name:object:为观察者注册监听name为notificationName的通知然后每次发出name为notificationName的通知时,注册监听后的观察者就会调用其自己定义的方法notificationSelector来进行响应。
NSNotification的特点呢,就是需要被观察者先主动发出通知,然后观察者注册监听后再来进行响应,比KVO多了发送通知的一步,但是其优点是监听不局限于属性的变化,还可以对多种多样的状态变化进行监听,监听范围广,使用也更灵活。
分享到:
相关推荐
iOS开发中,KVC(Key-Value Coding)、KVO(Key-Value Observing)、NSNotification和Delegate是四种常见的数据通信和状态监听技术。下面将详细解释这些概念及其区别。 1. KVC(Key-Value Coding) KVC是Objective-...
在iOS开发中,Key Value Coding (KVC) 和 Key Value Observing (KVO) 是两种强大的数据处理技术,它们提供了一种间接访问对象属性的方法,以及动态监控属性变化的能力。 KVC,全称Key Value Coding,是Objective-C...
- **NSNotification**:更通用,可以观察任何事件,但不如KVO直接和精确。 - **Blocks/Closures**:更现代,代码更简洁,但可能导致循环引用。 - **Delegate**:面向协议,适合一对一通信,不适合多对一监听。 在...
iOS面试会测试Objective-C/Swift的特性,内存管理,KVO、NSNotification、delegate和block的使用,以及性能优化和避免内存泄漏的方法。 总体而言,面试旨在全面评估应聘者的综合能力和专业技能,确保他们能够适应并...
本文将深入讲解几个关键知识点,包括通知(NSNotification)、属性关键字、分类、扩展以及代理(Delegate)和KVO(Key-value observing)。 首先,我们来看通知(NSNotification)。通知是一种基于观察者模式的机制...
8. **Notification 和 KVO**:如果需要在其他地方响应地区选择或删除事件,可以使用NSNotification来发布和接收通知,或者使用Key-Value Observing(KVO)来监听特定对象的属性变化。 综上所述,设计和实现“ios-...
4. **KVO(Key-Value Observing)** 或 **NSNotification**: 如果没有使用Core Data,开发者可能使用KVO来监听数据源的变化,或者通过NSNotification中心来触发加载更多数据的事件。 5. **ScrollView Delegate ...
2. **协议(Protocol)**:定义一个协议,让多个类遵循,然后通过代理(Delegate)模式实现数据传递。委托对象可以通过协议方法接收并处理数据。 3. **Block(闭包)**:Block是Objective-C中的匿名函数,可以捕获...
在iOS开发中,代理方法(Delegate Method)是Objective-C和Swift中的一种常见设计模式,用于对象间通信。它允许一个对象(通常称为“代理”)响应另一个对象(“委托者”)的事件或请求。代理模式是iOS应用中实现回...
它包含Core , Event , UI三层,封装了数据持久化,数据缓存(文件缓存,内存缓存),kvo,Notification,delegate,动画,图片处理,自定义了ViewController生命周期。 本库采用ARC XY快速 核 XYTimer //定时器类 ...
传值集合.zip"压缩包,我们可以详细探讨一下其中提及的七大传值方式:代理(Delegate)、单例(Singleton)、属性(Property)、通知(Notification)、Block、Key-Value Coding(KVC)和Key-Value Observing(KVO)...
这种代理传值方式在某些情况下优于其他数据传递方法,如使用`NSNotification`或`KVO`。它更加灵活,可以实现一对多的关系,同时提供了明确的调用路径,让代码逻辑更清晰。但需要注意的是,过多的代理关系可能会使...
本文将详细讨论几种常见的数据传递方法,包括Key-Value Observing(KVO)、Protocol、Delegate、NSNotification以及SignalLeton,以帮助开发者更好地理解和运用这些技术。 首先,Key-Value Observing(KVO)是...
这部分会讲解如何使用类目进行代码组织和功能扩展,以及协议在设计模式如代理(Delegate)和数据源(DataSource)中的应用。 5. **内存管理.ppt**: Objective-C使用引用计数进行内存管理,这部分可能涵盖`retain`...
8. KVC与KVO:Key-Value Coding(KVC)和Key-Value Observing(KVO)是OC中用于动态访问和监听对象属性的机制,常用于数据绑定和观察者模式。 9. NSNotification:NSNotification中心允许对象发布和接收通知,提供...
4. **观察者模式**:NSNotification和KVO(Key-Value Observing)是COCOA中的观察者模式实现,让一个对象能够监听并响应其他对象的状态变化。 5. **模型-视图-控制器(MVC)模式**:COCOA的核心架构,将数据处理...
#### 题目120:NSNotification与delegate的区别是什么? - **知识点**: - ** NSNotification**:NSNotification是基于观察者模式的通知中心机制,允许对象之间进行松散耦合的通信。 - ** delegate**:代理模式...
在Cocoa框架中,监听和观察机制是实现对象间通信的重要方式,主要涉及五种方法。这些方法使得对象能够响应其他对象的状态变化,保持应用程序的动态性和灵活性。下面将详细介绍这五种方法。 1. 手动广播者和监听者:...