通知,KVO解析

一、通知

1> 通知中心(NSNotificationCenter)

  • 每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信
  • 任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么。其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知



2> 通知(NSNotification)

通知,KVO解析_第1张图片

3> 发布通知

通知中心(NSNotificationCenter)提供了相应的方法来帮助发布通知

  • 发布一个notification通知,可在notification对象中设置通知的名称、通知发布者、额外信息

  • 发布一个名称为aName的通知,anObject为这个通知的发布者

  • 发布一个名称为aName的通知,anObject为这个通知的发布者,aUserInfo为额外信息

4> 注册通知监听器
通知中心(NSNotificationCenter)提供了方法来注册一个监听通知的监听器


通知,KVO解析_第2张图片

5> 取消注册通知监听器
通知中心不会保留(retain)监听对象,在通知中心注册过的对象,必须在该对象释放前取消注册。否则,当相应的通知再次出现时,通知中心仍然会向该监听器发送消息。 因为相应的监听器对象已经被释放了,所以可能会导致应用崩溃



6> 键盘的通知
通知,KVO解析_第3张图片


二、KVO(key value observing)
kvo是一种非常重要的机制,它允许监听对象的属性变化

1> 注册监听器
-(void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context

anObserver :监听器对象

keyPath :监听的属性

options :决定了当属性改变时,要传递什么数据给监听器


2> 监听器需要实现监听方法(该方法属于NSObejct的)

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)objectchange:(NSDictionary *)change context:(void *)context

keyPath :监听的属性

object :谁的属性改变了

change :属性改变时传递过来的信息(取决于添加监听器时的options参数)


3> 移除监听器

-(void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath




你可能感兴趣的:(通知,KVO)