iOS--KVO

作者: STONEsh | 来源:发表于2016-02-28 15:35 被阅读163次

    ViewController.m#

    //
    //  ViewController.m
    //  KVO
    //
    
    //
    
    #import "ViewController.h"
    #import "Person.h"
    @interface ViewController ()
    
    
    @property(nonatomic, strong)Person *person;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
       self.person = [[Person alloc] init];
        
        _person.name = @"dongliang";
        
        //添加观察者 注册
        [_person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:(__bridge void *)self];
        
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
        
        [self.view addGestureRecognizer:tap];
        
    }
    
    //观察者的方法
    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
        
        //keypath 是观察的属性
        NSLog(@"---------keypath:%@",keyPath);
        //被观察的对象
        NSLog(@"---------object:%@",object);
        //新旧值
        NSLog(@"---------change:%@",change);//change是字典
        
        NSLog(@"---------context:%@",context);
        
        if ([change[NSKeyValueChangeNotificationIsPriorKey]boolValue]) {
            NSLog(@"1");
            NSLog(@"值改变之前");
        } else{
            NSLog(@"2");
            NSLog(@"值改变之后");
        }
        
    
        
    //    self.view.backgroundColor = [UIColor greenColor];
        
        //context的作用就是传值/////////////////////////////
        ViewController *vc = (__bridge ViewController *)context;
    
        vc.view.backgroundColor = [UIColor greenColor];
    }
    
    
    
    -(void)tapAction:(UITapGestureRecognizer *)sender{
        
        //我注意你很久了
        _person.name = @"zhaoyu";
        
        
    }
    
    
    /**
     *  移除观察者!!!!!!!!!!!!!!!!!
     */
    
    -(void)dealloc{
        
        [_person removeObserver:self forKeyPath:@"name"];
    }
    
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    
    

    Person.h#

    //
    //  Person.h
    //  KVO
    //
    
    //
    
    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    @property(nonatomic, strong)NSString *name;
    
    
    @end
    
    

    Person.m#

    //
    //  Person.m
    //  KVO
    //
    
    //
    
    #import "Person.h"
    
    @implementation Person
    
    @end
    
    

    相关文章

      网友评论

          本文标题: iOS--KVO

          本文链接:https://www.haomeiwen.com/subject/gfajkttx.html