KVO(2)

2024-04-25 22:58
文章标签 kvo

本文主要是介绍KVO(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:selfaction:@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];
      }
      }
      如下图:
      “`
      这里写图片描述
      这里写图片描述

这篇关于KVO(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936021

相关文章

iOS--KVO的实现原理与具体应用

iOS--KVO的实现原理与具体应用 本文分为2个部分:概念与应用。 概念部分旨在剖析KVO这一设计模式的实现原理,应用部分通过创建的项目,以说明KVO技术在iOS开发中所带来的作用; 如果是作为是刚接触KVO的初学者,可以在了解基本原理后粗略看几遍底层实现原理,再认真阅读第二部分的应用内容“学会”怎么去使用KVO,往后再慢慢深入了解KVO这一“黑魔法”技术的实现原理。 【本次开发环境:

NSNotification、delegate和KVO的…

1.效率肯定是delegate比nsnotification高。 2. delegate方法比notification更加直接,最典型的特征是,delegate方法往往需要关注返回值, 也就是delegate方法的结果。比如-windowShouldClose:,需要关心返回的是yes还是no。所以delegate方法往往包含 should这个很传神的词。也就是好比你做我的delegat

轻量级KVO ——》 KVO 管理 observeValueForKeyPath

【转】http://joeyio.com/2013/10/21/lightweight_kvo/ 在这篇文章中,我会实现一个自己用的简单KVO类,我认为KVO非常棒,然而对于我大部分的使用场景来说,有这两个问题: 1. 我不喜欢在observeValueForKeyPath:ofObject:change:context:方法里通过keyPath值来做调度,当Observ

KVO详解及底层实现

什么是KVO?? KVO就是NSKeyValueObserving,请看官方文档的解释: 大概翻译如下: 一种非正式协议,通知其他对象的指定属性发生了改变。 简单理解就是,可以监听一个对象的某个属性是否发生改变。 那么问题来了,什么是非正式协议??有正式协议吗?? 麻蛋,本来想找官方文档的,找了半天没找到。从Stackoverflow找到了答案,貌似原来官方文档的链接失效了

(译)KVO的内部实现

转自:http://www.cocoachina.com/applenews/devnews/2014/0107/7667.html 09年的一篇文章,比较深入地阐述了KVO的内部实现。 KVO是实现Cocoa Bindings的基础,它提供了一种方法,当某个属性改变时,相应的objects会被通知到。在其他语言中,这种观察者模式通常需要单独实现,而在Objective-C中,通

iOS OC底层面试题(KVO (Key-value observing))

KVO (Key-value observing) KVO是观察者模式的另一实现。 使用了isa混写(isa-swizzling)来实现KVO 使用setter方法改变值KVO会生效,使用setValue:forKey即KVC改变值KVO也会生效,因为KVC会去调用setter方法 - (void)setValue:(id)value{[self willChangeValueForKey

iOS 通知 和 KVO

、 /* KVO提供一种机制,当指定的被观察的对像的属性被修改后,KVO会自动通知响应的观察者,KVC(键值编码)是KVO的基础 KVO使用:被观察着发生addobserver:forkeyPath:options:context:方法来添加观察者.然后只要被观察者的keypath值发生变化(注意单纯改变值不会调用此方法,只有通过getter和sett来改变值才会触发KVO),就会在观

KVO的实现原理与具体应用

本文分为2个部分:概念与应用。 概念部分旨在剖析KVO这一设计模式的实现原理,应用部分通过创建的项目,以说明KVO技术在iOS开发中所带来的作用; 如果是作为是刚接触KVO的初学者,可以在了解基本原理后粗略看几遍底层实现原理,再认真阅读第二部分的应用内容“学会”怎么去使用KVO,往后再慢慢深入了解KVO这一“黑魔法”技术的实现原理。 【本次开发环境: Xcode:7.2     iO

【iOS】KVO相关总结

目录 1. 什么是KVO?2. KVO的基本使用3. KVO的进阶使用observationInfo属性context 的使用KVO触发监听方法的方式自动触发手动触发 KVO新旧值相等时不触发KVO的从属关系一对一关系一对多关系 4. KVO使用注意5. KVO本质原理分析伪代码保留伪代码下的类并编译运行对比添加监听前后实例对象的类对象对比添加监听前后实例对象的方法实现对比添加监听前后实例

iOS概念之KVO(Key-Value Observing)

在一个复杂的,有状态的系统中,当一个对象的状态发生改变,如何通知系统,并对状态改变做出相应的行为是必需考虑的一个问题,在iOS中为这类问题提供了4种解决方法: 1. NSNotifiactaion和NSNotificationCenter:通知中心 2. Delegates:代理, 3. Callback:回调, 4. KVO(Key-Value Observing):