IOS KVO的实现原理

Posted 守望星空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS KVO的实现原理相关的知识,希望对你有一定的参考价值。

 

#import "HMViewController.h"
#import "HMPerson.h"

@interface HMViewController ()
@property (nonatomic, strong) HMPerson *p;
@end

@implementation HMViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 运行时机制:runtime
    
    HMPerson *p = [[HMPerson alloc] init];
    p.age = 20;
    
    [p addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];
    
    p.age = 30;
    self.p = p;
}

- (void)dealloc
{
    [self.p removeObserver:self forKeyPath:@"age"];
}

/**
 *  当监控的某个属性的值改变了就会调用
 *
 *  @param keyPath 属性名(哪个属性改了?)
 *  @param object  哪个对象的属性被改了?
 *  @param change  属性的修改情况(属性原来的值、属性最新的值)
 *  @param context void * == id
 */
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    NSLog(@"%@对象的%@属性改变了:%@", object, keyPath, change);
}

@end

 

以上是关于IOS KVO的实现原理的主要内容,如果未能解决你的问题,请参考以下文章

ios KVO的实现原理

iOS开发-- KVO的实现原理与具体应用

iOS底层原理-KVO本质探究

iOS底层原理-KVO本质探究

iOS底层探索之KVO—KVO原理分析

iOS之深入解析KVO的底层原理