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)需要多点代码,在删掉前必须移除监听者。