iOS 代理 NSNotification KVO KVC

188 阅读1分钟

代理一种软件设计模式

代理模式实现

@protocol

一对一

工作流程

一般声明为weak以规避循环引用

NSNotificationCenter

特点 1.是使用观察者模式来实现的用于跨层传递消息机制

2.传递方式一对多

如何实现通知机制?

KVO

OC 对观察者模式的又一实现

apple 使用isa混血(isa-swizzeling)来实现KVO

KVO 1 通过kvc设置value可以生效 2.通过成员直接赋值value可以不生效解决方案是

  • (void)increase { 手动kvo //直接成员变量赋值 [self willChangeValueForKey:@"key"]; _name = @"zefeng"; [self didChangeValueForKey:@"key"]; }

KVC

key-value coding 健值编码 有无违背面向对象思想,key值无限制 valueforkey:

KVC

获取 getKey key isKey _key accessInstanceVariablesDirectly 方法 NO 不允许访问 YES则查询下面

NSInteger _age;
NSInteger _isAge;
NSInteger age;
NSInteger isAge;

设置 首先 setKey: _setKey: 方法

accessInstanceVariablesDirectly 方法 NO 不允许访问 YES则查询下面 成员变量 _key _isKey key isKey

KVC.png