KVO vs NSNotification vs protocol/delegate:
1. Use a delegate if you want to talk to only one object. For example, a tableView has a delegate - only one object should be responsible for dealing with it.
2. Use notifications if you want to tell everyone that something has happened. For example in low memory situations a notification is sent telling your app that there has been a memory warning. Because lots of objects in your app might want to lower their memory usage it's a notification.
3. I don't think KVO is a good idea at all and try not to use it but, if you want to find out if a property has changed you can listen for changes.
1. 效率肯定是delegate比NSNotification高。
delegate方法比notification更加直接,最典型的特征是,delegate方法往往需要关注返回值, 也就是delegate方法的结果。比如-windowShouldClose:,需要关心返回的是yes还是no。所以delegate方法往往包含 should这个很传神的词。也就是好比你做我的delegate,我会问你我想关闭窗口你愿意吗?你需要给我一个答案,我根据你的答案来决定如何做下一 步。相反的,notification最大的特色就是不关心接受者的态度, 我只管把通告放出来,你接受不接受就是你的事情,同时我也不关心结果。所以notification往往用did这个词汇,比如 NSWindowDidResizeNotification,那么NSWindow对象放出这个notification后就什么都不管了也不会等待接 受者的反应。
2、KVO和NSNotification的区别:
和delegate一样,KVO和NSNotification的作用也是类与类之间的通信,与delegate不同的是1)这两个都是负责发出通知,剩下的事情就不管了,所以没有返回值;2)delegate只是一对一,而这两个可以一对多。这两者也有各自的特点。
1)KVO的使用:
被观察者发出 addObserver:forKeyPath:options:context: 方法来添加观察者。
然后只要被观察者的keyPath值变化(注意:单纯改变其值不会调用此方法,只有通过getters和setters来改变值才会触发KVO),就会在观察者里调用方法observeValueForKeyPath:ofObject:change:context:
因此观察者需要实现方法 observeValueForKeyPath:ofObject:change:context: 来对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. 手动广播者和监听者:...