ios KVO

36 篇文章 0 订阅
**ViewController**
#import "ViewController.h"
#import "Person.h"
@interface ViewController ()

//首先要有一个类,kvo是监听 某个类 的 某个属性 的值变化
@property (nonatomic, retain) Person *person;  //定义一个属性
@end

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];

//*******  KVC : key value code  键值编码 ,间接给属性赋值 ***********************
    //    kvc 还能间接给系统属性赋值, 还可以用kvc给系统只读的属性赋值
    [self.view setValue:[UIColor orangeColor] forKey:@"backgroundColor"];

    self.person = [[Person alloc]init];
    [self.person setValue:@"林翰" forKey:@"name"];  // 给属性赋值
    [self.person setValue:@"23" forKeyPath:@"age"]; // 根据路径给属性赋值
//    [self.person setValue:@"马强" forKeyPath:@"stu.stuName"];

//  ********  KVO : key value observing 键值观察者 *****************
//    是用来观察属性值变化的,不仅仅可以观察自定义类的属性,也可以观察系统属性值变化

//    注册当前类对象为观察者, 观察Person属性变化
//    参数1: 设置观察者 self
//    参数2: 设置观察属性
//    参数3: 观察值的状态
//    参数4: 设置观察值的内容
    [self.person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:@"观察Person的name值"];

}
// 点击按钮更改 属性值
- (IBAction)kvoButton:(UIButton *)sender {
    [self.person setValue:@"大哥" forKey:@"name"];
}
// 当前属性值发生变化时触发的方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    NSLog(@"\n\n\n");

    if ([keyPath isEqualToString:@"name"]) {
        NSLog(@"keyPath = %@", keyPath);
        NSLog(@"object = %@", object);
        NSLog(@"change = %@", change);
        NSLog(@"context = %@", context);
    }

}
**Person 类**
person.h文件里
#import <Foundation/Foundation.h>
#import "Student.h"
@interface Person : NSObject

@property (nonatomic, copy) NSString *name; /**< Preson姓名 */
@property (nonatomic, assign) NSInteger age; /**< 年龄 */


@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值