KVO — 键值观察者模式

三步:
1.添加一个观察者
2.实现 观察者模式触发的方法
3.移除观察者的方法

一般在ARC情况下,dealloc 中实现的方法:
1.释放观察者 ,2.释放代理

- (void)dealloc
{   
    3. 只要写了 KVO,那就一定要写移除观察者的方法   
    [self removeObserver:self forKeyPath:@"array"];
}
- (void)viewDidLoad
 {   
    [super viewDidLoad];    
//KVO : (Key - value - Observer) 键值观察者    
self.array = [NSMutableArray array];       
//1. 添加一个观察者       
// 第一个self 表示观察者    
// 第一个参数 : 被观察者    
// 第二个参数 : 哪一个属性    
// 第三个参数 : 什么时候触发观察者的方法    
// 第四个参数 : 保险, 可以添加一些字符串,一般是nil  
// 谁去观察谁的哪一个属性,检查他变化的时间    
[self addObserver:self forKeyPath:@"array" options:(NSKeyValueObservingOptionNew) context:nil];   
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{    NSArray *array = @[@"1", @"2"];   
// [self.array setArray:array]; 这样不可以观察一个初始化过的数组 ,不会触发 observe 方法   
// self mutableSetValueForKeyPath:<#(nonnull NSString *)#>  这个是观察无序的,字典或者集合       
// KVC的方法    
[[self mutableArrayValueForKeyPath:@"array"] setArray:array];    
//这个是有序的,数组,这样才会触发observe方法

}
// 2. 观察者模式触发的方法- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{   
 NSLog(@"keypath === %@", keyPath);    
 NSLog(@"object  === %@", object);    
 NSLog(@"change === %@",change);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 6,070评论 1 16
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,401评论 30 472
  • 设计模式 1.delegate和notification什么区别,什么情况使用? 2.描述一下KVO和KVC。 K...
    丶逐渐阅读 5,958评论 3 2
  • 29.理解引用计数 Objective-C语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数...
    Code_Ninja阅读 5,489评论 1 3
  • 内存管理是程序在运行时分配内存、使用内存,并在程序完成时释放内存的过程。在Objective-C中,也被看作是在众...
    蹲瓜阅读 8,471评论 1 8

友情链接更多精彩内容