iOS开发 kvc kvo 委托代理 协议 通知 简述 和使用场景

时间:2022-08-30 14:48:06


kvc: 简单来说, 是存取类属性, 通过字符串来访问对象属性。

1、只针对类属性,设置键值对

2、设置setValue: forKey:,即forKey只能为类属性

3、取值valueForKey



kvo: 通过kvc 的方式修改被观察者的属性时,主动通知观察者。

1、利用KVC对类属性进行设置

2、注册observing对象addObserver:forKeyPath:options:context:

3、观察者类必须重写方法 observeValueForKeyPath:ofObject:change:context:

4、应用,MVC模型中,数据库(dataModal)发生变化时,引起view改变,用这种方式实现非常方便

kvc  和 kvo  一起使用。


协议: 个人理解是一个方法列表 , 其中定义了若干个方法,可以被任何类实现 。 


委托代理  : 实现协议方法。

感觉代理很难准确的用一个名词说出来,  它更像一种关系,   我想给我老公送束花,但是外面刮大风很冷, 我就委托花店替我送花送给我老公, 那么花店就要遵守替我送我的协议 。 花店就成为我的代理。

通过setDelegate来设置代理对象,最典型的例子是常用的TableView. 有控制链关系,通知没有。 控制链: 

单一拥有和可控制的对应关系。

优点:支持它的类有详尽和具体信息。

缺点:该类必须支持委托。某一时间只能有一个委托连接到某一对象。



通知 : 有很多应用, 在 设置选项里面有设置页面风格的选项。  比如,改变背景颜色, 或者设置字体。这个时候,  通知是不错的选择。

通知需要有一个通知中心:NSNotificationCenter,自定义通知的话需要给一个名字,然后监听。

优点:通知的发送者和接受者都不需要知道对方。可以指定接收通知的具体方法。通知名可以是任何字符串。

缺点:较键值观察(KVO)需要多点代码,在删掉前必须移除监听者。