🚩 | 问题
NotificationCenter、KVC、KVO、Delegate
📌 | 解答
NotificationCenter
是一种通知中心,可以在一处发出通知,同时在N多处地方来接收通知,接收过通知后需要在dealloc中释放通知,否则会出现莫名其妙的错误
/** * 发通知 */ [[NSNotificationCenter defaultCenter] postNotificationName:@"" object:nil userInfo:nil]; /** * 用来接收通知 * * @param path 接收通知后执行的方法 */ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(path) name:@"" object:nil]; /** * 移除通知 */ [[NSNotificationCenter defaultCenter] removeObserver:self];
KVC
是一种键值编码,主要由NSKeyValueCoding协议提供,而NSObject就实现了这个协议,也就是说NSObjC中几乎所有的对象都支持KVC操作,常用的KVC操作方法如下:
动态设置:
setValue:属性值 forKey:属性名(用于简单路径)、setValue:属性值 forKeyPath:属性路径(用于复合路径,例如Person有一个Account类型的属性,那么person.account就是一个复合属性)
动态读取:
valueForKey:属性名 、valueForKeyPath:属性名(用于复合路径)
KVO
键值监听,KVO其实是一种观察者模式;
常用的方法:注册指定Key路径的监听器: addObserver: forKeyPath: options: context: 删除指定Key路径的监听器: removeObserver: forKeyPath、removeObserver: forKeyPath: context: 回调监听: observeValueForKeyPath: ofObject: change: context:
Delegate
代理设计模式:是一种用通俗的话来讲就是我完成不了的事情扔给别人来完成,但是别人必须遵守我的协议才行。举个例子就是说我口渴了,想喝冰红茶;但是我不高兴去买,用手机外卖软件让人来帮我买一瓶(他就是我的代理了);但是呢,我得冰红茶必须是冰冻的(这就是协议);