码迷,mamicode.com
首页 > 移动开发 > 详细

IOS KVO的实现原理

时间:2017-04-23 16:54:32      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:class   ons   nsstring   运行时   margin   property   atomic   add   span   

 

#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的实现原理

标签:class   ons   nsstring   运行时   margin   property   atomic   add   span   

原文地址:http://www.cnblogs.com/liuwj/p/6752693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!