Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说ios KVO,希望能够帮助你!!!。
**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
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。