KVC(2)

@interface Walker : NSObject
{
    NSInteger _age;
    NSString *_name;
}
@property (nonatomic) NSInteger age;
@property (nonatomic, retain) NSString *name;
- (id)initWithName:(NSString *)name age:(NSInteger)age;

``

import “Walker.h”

@implementation Walker

  • (id)initWithName:(NSString *)name age:(NSInteger)age

    {

    if (self = [super init]) {

    _name = name;

    _age = age;

    }

    return self;

    }

    @end

import

  • (void)viewDidLoad {

    [super viewDidLoad];

    _walker = [[Walker alloc] initWithName:@”LJF” age:25];

    NSLog(@”%ld”, (long)_walker.age);

    /* 关键步骤 */

    [_walker addObserver:self

    forKeyPath:@”age”

    options:NSKeyValueObservingOptionNew

    context:nil];

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
     [btn setFrame:CGRectMake(120, 200, 100, 35)];
     [btn setBackgroundColor:[UIColor lightGrayColor]];
     [btn setTitle:@"增加5岁" forState:UIControlStateNormal];
     [btn addTarget:self
                     action:@selector(buttonPressed)
           forControlEvents:UIControlEventTouchUpInside];
     [self.view addSubview:btn];
    
     _ageLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 150, 200, 35)];
     _ageLabel.text = [NSString stringWithFormat:@"%@现在的年龄是: %ld", _walker.name, (long)_walker.age];
     _ageLabel.backgroundColor = [UIColor clearColor];
     [self.view addSubview:_ageLabel];
    

    }

  • (void)buttonPressed

    {

    _walker.age += 5;

    }

    /* KVO function, 只要object的keyPath属性发生变化,就会调用此函数*/

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

      {

      NSLog(@”keyPath = %@ \nobject =%@ \nchange = %@ \n”, keyPath,object,change);

      if ([keyPath isEqualToString:@”age”] && object == _walker) {

      _ageLabel.text = [NSString stringWithFormat:@”%@现在的年龄是: %ld”, _walker.name, (long)_walker.age];

      }

      }

      如下图:

      “`

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 16:23:05

KVC(2)的相关文章

0124——KVC KVO模式

1.KVC KVC是Key-Value-Coding的简称,它是一种可以直接通过字符串的名 字(key)来访问类属性(实例变量)的机制.而不是通过调用Setter.Getter方法访问.当使用KVO.Core Data.CocoaBindings.AppleScript(Mac支持)时,KVC是关键技术.  Person * xw = [[Person alloc]init]; Dog *dg = [[Dog alloc]init]; //使用kvc设置成员变量的值 //使用之前必须得知道变量的

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

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

【非凡程序员】 OC第九节课 (KVC的运算)

买粽子的例子,主要输练习KVC的应用,(注意:必须建立一个数组,才能使用KVC的运算)详细代码如下: 1.main函数代码: #import <Foundation/Foundation.h> #import "Person.h" #import "zongZi.h" int main(int argc, const char * argv[]) {     @autoreleasepool {         // insert code here..

初识MVC和KVC

简单MVC M---model:模型,相当于饭馆里的厨师,厨师提供他会的菜式给老板,老板不会关心他是怎么去做的. V---view:视图,相当于饭馆里的服务员,服务员从老板那里拿到菜单,提供给客户. C---controller:控制器,相当于饭馆里的老板.老板从厨师那里得到菜式,弄成菜单提供给服务员处. KVC--是一种键值编码,通过键值间接编码 K---key:键 V---value值 C---coding:编码 使用说明: 1.使用KVC间接修改对象属性时,系统会自动判断对象属性的类型,并

OC学习篇之---KVC和KVO操作

前一篇文章我们介绍了OC中最常用的文件操作:http://blog.csdn.net/jiangwei0910410003/article/details/41875015,那么今天来看一下OC中的一个比较有特色的知识点:KVC和KVO 一.KVC操作 OC中的KVC操作就和Java中使用反射机制去访问类的private权限的变量,很暴力的,这样做就会破坏类的封装性,本来类中的的private权限就是不希望外界去访问的,但是我们这样去操作,就会反其道而行,但是我们有时候真的需要去这样做,哎.所以

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

iOS 中KVC.KVO.NSNotification.delegate 总结及区别 1.KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性.而不是通过调用Setter.Getter方法访问.KVO 就是基于 KVC 实现的关键技术之一. Demo: @interface myPerson : NSObject { NSString*_name; int      _age; int      _height; int      _w

NotificationCenter KVC KVO Delegate总结

KVO(Key-Value- Observing): 一对多, 观察者模式,键值观察机制,它提供了观察某 一属性变化的方法,极大简化了代码. KVO底层实现: - kvo 是基于 runtime 机制实现 - 使用了 isa 混写 isa-swizzling ,当一个对象( 假设是person对象,   person的类是MYPerson)的属性值(假设 person 的 age 属性)发生改变时,系统会自动生成一个类,继承自  MYPerson : NSKVONotifying_MYPerso

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

K-V-C 键值观察机制

在两个不同的控制器之间传值是iOS开发中常有的情况,应对这种情况呢,有多种的应对办法.kvc就是其中的一种,所以,我们就在此解释之.   key value observing  键值观察,给人一种高冷的感觉,其实,我们可以用一个通俗的例子来解释之.就拿美俄之间的间谍来举例子.美俄是两个各自独立的国家,但是为了各自的利益,彼此之间勾心斗角,不断的爆出间谍丑闻.打住!从政治的深渊回到技术层面O(∩_∩)O.美国想知道俄罗斯的最新的导弹技术,于是派间谍收集情报,(kvo的第一步:注册观察者-美国,监

字典转模型KVC和runtime二者实现与区别

我们知道在开发中,字典转模型是一种很常用的设计模式,当字典中元素的个数比较少的时候,我们可以直接用dic[key]去给模型对象的属性赋值,但是当字典中元素的个数比较多的时候,再用前面的解决方法就不行了,所以就有了KVC(key value coding:键值编码)字典转模型的设计模式. KVC的设计原理: [item setValue:@"value" forKey:@"property"]: 1.首先去模型中查找有没有setProperty,找到,直接调用赋值 [