美文网首页
iOS 中KVC、KVO菜鸟都能懂的教程

iOS 中KVC、KVO菜鸟都能懂的教程

作者: abios | 来源:发表于2016-05-27 16:06 被阅读0次

1、KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的关键技术之一。(关键点:访问对象的属性!)

例子:

//定义一个Person类  有两个属性name 和 age

@interface Person : NSObject

{

NSString*_name;

int      _age;

} @end

//定义一个viewController 用来测试(如果你已经学到UI阶段就用viewController,如果没学到就在main函数里面实现)

#import "Person.h"

@interface ViewController :UIViewController

@property (nonatomic, retain) Person* testPerson;

@end

- (void)viewDidLoad {

      [superviewDidLoad];

//创建Person对象

      testPerson = [[myPerson alloc] init];

//设置age属性的值

      [testPerson setValue:[NSNumber  numberWithInt:18]  forKey:@"age"];  

//获取age的值

      NSLog(@"testPerson‘s age = %@",      [testPerson valueForKey:@"age"]);

}

就这两个方法:

 - (id)valueForKey:(NSString *)key;          

-(void)setValue:(id)value forKey:(NSString *)key;

key是要设置的age属性,value 是age的值

2、KVO的是KeyValue Observe的缩写,中文是键值观察。这是一个典型的观察者模式,观察者在键值改变时会得到通知。


设置就3步:

1.注册需要观察的对象的属性addObserver:forKeyPath:options:context:(一般添加self为观察者)

2.实现observeValueForKeyPath:ofObject:change:context:方法,这个方法当观察的属性变化时会自动调用(这是一个回调方法)

3.取消注册观察removeObserver:forKeyPath:context:(在dealloc里面写)

例子:

//定义一个Person类  有两个属性name 和 age

@interface Person : NSObject

{

NSString*_name;

int      _age;

} @end

//定义一个viewController 用来测试

#import "Person.h"

@interface ViewController :UIViewController

@property (nonatomic, retain) Person* testPerson;

@end

- (void)viewDidLoad {

[superviewDidLoad];

//创建Person对象

testPerson = [[myPerson alloc] init];

//第一步:添加观察者self

[testPerson addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew    context:nil]; 

}

//第二步 添加回调方法  当要观察的值发生变化时 进行自己想要的操作

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

if ([keyPath isEqualToString:@"age"]) {

NSLog(@"new Age =%@", [change valueForKey:NSKeyValueChangeNewKey]);

}

//第三步移除观察者

- (void)dealloc

{

[testPerson removeObserver:self forKeyPath:@"age" context:nil];

[super dealloc];

}

感谢码迷的文章

相关文章

  • iOS 中KVC、KVO菜鸟都能懂的教程

    1、KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属...

  • 从网上收集的一些关键知识点总结

    iOS 中KVC、KVO、NSNotification、delegate 总结及区别

  • 无标题文章

    ios中的 kvc和kvo的区别 KVC编程时setValue(value: AnyObje...

  • KVC,KVO,消息,代理

    iOS 中KVC、KVO、NSNotification、delegate 总结及区别 1、KVC,即是指 NSKe...

  • KVC 和 KVO

    iOS-KVC和KVO精炼讲解(干货)KVC 和 KVOiOS开发系列--Objective-C之KVC、KVO细...

  • KVC

    iOS 如何使用KVC iOS开发UI篇—Kvc简单介绍 iOS开发系列--Objective-C之KVC、KVO

  • iOS - KVO

    [toc] 参考 KVO KVC 【 iOS--KVO的实现原理与具体应用 】 【 IOS-详解KVO底层实现 】...

  • iOS-KVO浅谈

    上一篇:iOS-KVC浅谈 前言:KVO 作为 KVC 的同袍兄弟,功能更强大,聊聊 KVO。 一、KVO 简介 ...

  • 说一下KVC和KVO

    本篇采用简单的例子,来介绍 iOS 中的 KVC 和 KVO 的用法和实现原理。 一、KVC 1. KVC是什么 ...

  • iOS日记15-KVC

    1.iOS开发技巧系列---详解KVC 2.漫谈 KVC 与 KVO 3.KVC/KVO原理详解及编程指南 关键点...

网友评论

      本文标题:iOS 中KVC、KVO菜鸟都能懂的教程

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