iOS KVO和KVC简单使用

Account.h

#import <Foundation/Foundation.h>

@interface Account : NSObject

@property (nonatomic,assign) float balance;

@end

Account.m

#import "Account.h"

@implementation Account

@end

Person.h

#import <Foundation/Foundation.h>
#import "Account.h"

@interface Person : NSObject
{
    @private int _age;
}

@property (nonatomic,copy) NSString * name;

@property (nonatomic,strong) Account * account;

- (void)showMessage;

@end

Person.m

#import "Person.h"

@implementation Person

- (void)showMessage{
    NSLog(@"name = %@,age = %d",_name,_age);
}

@end

ViewController.m

#import "ViewController.h"
#import "Account.h"
#import "Person.h"
@interface ViewController ()
@property(nonatomic,strong)Person *person1;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    _person1 = [[Person alloc] init];
    [_person1 setValue:@"zhaotian" forKey:@"name"];//KVC给person1.name赋值

    Account *account1 = [[Account alloc] init];
    [account1 setValue:@"100000.f" forKey:@"balance"];//KVC给account1.balance赋值

    [_person1 setValue:account1 forKey:@"account"];//KVC给person.account赋值
    //1.添加观察者改变 _person1.account.balance
    [_person1 addObserver:self forKeyPath:@"account.balance" options:NSKeyValueObservingOptionNew context:nil];

    _person1.account.balance = 20000000.f;
}
//2.监听的属性变化后获得的通知  _person1.account.balance改变后调用
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
    if ([keyPath isEqualToString:@"account.balance"]) {
        NSLog(@"keyPath=%@,object=%@,newValue=%f,context=%@",keyPath,object,[[change objectForKey:@"new"] floatValue],context);
    }
}
//3.销毁观察者
- (void)dealloc{
    [_person1 removeObserver:self forKeyPath:@"account.balance"];
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
时间: 2024-11-03 20:57:08

iOS KVO和KVC简单使用的相关文章

IOS KVO与NSNotificationCenter简单使用

每次面试都被问到KVO或者通知.今天也自己来看了看通知. 1.NSNotificationCenter使用. 使用步骤:添加观察者.发送通知.移除观察者. 添加观察者:哪里需要接收通知,就在哪里加.例如: [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(reciveNotfi:) name:@"testNot" object:nil]; 发送通知: [[NSNotificationCent

iOS开发——实用篇&amp;KVO与KVC详解

KVO与KVC详解 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听(KVO)特性: 键值编码KVC 键值监听KVO 键值编码KVC 我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Valu

iOS开发UI篇—KVC简单介绍

一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observer 键值观察.监听某一个模型的属性,只要模型属性的值一变化就通知你. 二.使用KVC 1.KVC基本使用介绍 (1)代码示例: 新建一个命令行项目,用以演示KVC的用法 完成之后为项目添加一个Person类. 为Person类添加两个属性(name和age),注意这两个属性的类型. 1 #import <Foundation/Fo

ios开发UI基础—Kvc简单介绍

一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observer 键值观察.监听某一个模型的属性,只要模型属性的值一变化就通知你. 二.使用KVC 1.KVC基本使用介绍 (1)代码示例: 新建一个命令行项目,用以演示KVC的用法 完成之后为项目添加一个Person类. 为Person类添加两个属性(name和age),注意这两个属性的类型. 1 #import <Foundation/Fo

文顶顶 iOS开发UI篇—Kvc简单介绍

ios开发UI篇—Kvc简单介绍 一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observer 键值观察.监听某一个模型的属性,只要模型属性的值一变化就通知你. 二.使用KVC 1.KVC基本使用介绍 (1)代码示例: 新建一个命令行项目,用以演示KVC的用法 完成之后为项目添加一个Person类. 为Person类添加两个属性(name和age),注意这两个属性的类型. 1 #impo

Kvc简单介绍

Kvc简单介绍 一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observer 键值观察.监听某一个模型的属性,只要模型属性的值一变化就通知你. 二.使用KVC 1.KVC基本使用介绍 (1)代码示例: 新建一个命令行项目,用以演示KVC的用法 完成之后为项目添加一个Person类. 为Person类添加两个属性(name和age),注意这两个属性的类型. 1 #import <Found

iOS KVO概述

iOS KVO概述 面试中经常会被问到:什么是KVO?这个问题既然出现概率这么大,那么我们就来详细讲一讲到底什么是KVO.下次再有面试官问你的时候,你就可以娓娓道来,以彰显高逼格 概述 问:什么是KVO? 答:KVO是Key-Value Observing的缩写.它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了. 如果你能这样回答,面试官一定不会说你错的,这就是KVO的原理.但是如果你能说出KVO

iOS平台基于KVC的JSON与数据对象绑定

iOS平台基于KVC的JSON与数据对象绑定 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 在iOS平台上,要操纵JSON数据并不困难,但是,我们还有更简单的解决方案,使用KVC,全称是Key-Value Coding. 假设开发者(你)开发了一款应用,它的数据来自于外部对Web服务,要从Web服务中取回一些JSON数据,数据如下: {"count": 3, "sum": 9.0, &

KVO、KVC

Key-Value Observing (简写为KVO):当指定的对象的属性被修改了,允许对象接受到通知的机制.每次指定的被观察对象的属性被修改的时候,KVO都会自动的去通知相应的观察者,相当于设计模式中的观察者模式. KVO的优点:当有属性改变,KVO会提供自动的消息通知.这样的架构有很多好处.首先,开发人员不需要自己去实现这样的方案:每次属性改变了就发送消息通知.这是KVO 机制提供的最大的优点.因为这个方案已经被明确定义,获得框架级支持,可以方便地采用.开发人员不需要添加任何代码,不需要设