`

ios开发--KVO浅析

 
阅读更多

目标:监听NSMutableArray对象中增加了什么

 

代码如下:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.dataArray = [NSMutableArray arrayWithObject:@"1"];
    [self addObserver:self forKeyPath:@"dataArray" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];
     
}

 

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    NSLog(@"%@", keyPath);
    NSLog(@"%@", object);
    NSLog(@"%@", change);
}

 

- (IBAction)add:(id)sender
{
    NSArray *addData = [NSArray arrayWithObjects:@"11", @"12", @"13", nil];
    [self.dataArray addObjectsFromArray:addData];
    
    self.dataArray = [NSMutableArray arrayWithObject:@"2"];
}

 

输入日志:

2013-01-15 16:05:10.120 KVOTest[2199:907] dataArray
2013-01-15 16:05:10.121 KVOTest[2199:907] <ZZTViewController: 0x20846590>
2013-01-15 16:05:10.123 KVOTest[2199:907] {
    kind = 1;
    new =     (
        2
    );
    old =     (
        1,
        11,
        12,
        13
    );
}

 

 

经过测试得如下结论:kvo监听的是对象指针的变动,NSString、int、float等对象的变动(abc = @"123"、abc = 12、abc = 12.2)皆为指针的变动,所以通过此方式来捕捉array的变化是不可行的

 

但,我们可以通过此方式来做控件属性的变动。如下:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.personObject = [PersonObject personObjectWithBankInstance:[BankObject bankObjectWithAccountBalance:10]];
    
    [self.personObject addObserver:self forKeyPath:@"bankInstance.accountBalance" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];    // 此处注意是监听personObject对象下的bankInstance的accountBalance变化
}

 

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    NSLog(@"%@", keyPath);
    NSLog(@"%@", object);
    NSLog(@"%@", change);
}

 

- (IBAction)add:(id)sender
{
    [self.personObject.bankInstance setAccountBalance:2111];
}

 输出日志:

2013-01-15 16:05:10.111 KVOTest[2199:907] bankInstance.accountBalance
2013-01-15 16:05:10.116 KVOTest[2199:907] <PersonObject: 0x20856180>
2013-01-15 16:05:10.118 KVOTest[2199:907] {
    kind = 1;
    new = 2111;
    old = 10;
}

 

如有问题,请留言共同探讨。

分享到:
评论

相关推荐

    iOS-RxSwift-KVO、UI控件、手势、通知、定时器、网络请求的使用-Demo

    总之,"iOS-RxSwift-KVO、UI控件、手势、通知、定时器、网络请求的使用-Demo"这个项目旨在展示如何在实践中运用RxSwift进行全方面的功能开发,帮助开发者掌握函数响应式编程在iOS开发中的应用。通过学习和实践这个...

    ios-简单实现KVO.zip

    用Runtime的方法简单的实现了一下KVO,通过这个Demo,能更方便对KVO的理解!Demo写的比较简单,有兴趣的同学可以加以完善或者可以把想法留言给我!github地址:https://github.com/Dreamskyqihang/HYKVODemo

    ios-MVC KVO实现.zip

    在iOS开发中,MVC(Model-View-Controller)是一种常用的设计模式,它将...总的来说,MVC模式和KVO是iOS开发中非常重要的工具。掌握它们的使用,不仅可以提高代码质量,还能提升开发效率,让应用程序更加健壮和灵活。

    ios-KVC和KVO学习笔记.zip

    如果需要观察多个属性的变化,为避免产生大量的代码,最好是使用键值观察(Key Value Observing,简称KVO),这也是Apple在自己的软件中大量使用的一种。 使用键值观察跟踪单个属性或集合(如数组)的变化非常...

    ios-MVVM KVO 购物车 (一处计算总价钱).zip

    在iOS开发中,MVVM(Model-View-ViewModel)架构是一种流行的设计模式,它通过将业务逻辑、数据处理和视图展示分离,提高了代码的可读性和可维护性。在这个"ios-MVVM KVO 购物车 (一处计算总价钱).zip"项目中,...

    ios-KVO底层实现--利用runtime简单的实现KVO底层原理.zip

    在iOS开发中,KVO广泛应用于数据绑定和响应式编程。然而,KVO的底层实现往往被开发者视为黑盒。本篇文章将探讨如何利用Objective-C的Runtime机制来实现KVO的基本功能,以增进对这一机制的理解。 1. **Runtime简介**...

    iOS-KVO模式源码Demo

    总结,KVO是iOS开发中的一个重要工具,它简化了对象间的数据同步,提高了代码的可维护性。通过深入理解KVO的原理和实践,开发者可以更好地利用这一机制提升应用程序的效率和用户体验。在“iOS-KVO模式源码KVODemo”...

    探索Objective-C的KVO:解锁动态属性观察的艺术

    6. **Cocoa和Cocoa Touch框架**:针对macOS和iOS的应用开发,Objective-C与Cocoa和Cocoa Touch框架配合,为开发者提供了丰富的用户界面组件和图形界面开发工具。 7. **内存管理**:Objective-C支持手动管理内存,即...

    ios-KVO.zip

    在iOS开发中,KVO是一种实用的工具,它能帮助我们实现数据驱动的编程,无需手动设置通知或者代理来追踪对象状态的变化。在“ios-KVO.zip”压缩包中,包含了一个名为“CustomNightDemo”的示例项目,很可能是用来演示...

    swift-KVC与KVO使用姿势和原理解析

    在本文中,我们将深入探讨这两种技术的使用方法、工作原理以及它们在实际开发中的应用。 ### Key-Value Coding(KVC) KVC 是一种机制,它允许通过键值来间接访问对象的属性,即使这些属性没有公开的getter或...

    iOS中KVC-KVO例子

    在iOS开发中,Key-Value Coding (KVC) 和 Key-Value Observing (KVO) 是两种非常重要的机制,它们都是Objective-C中的特性,用于对象属性的动态访问和观察。KVC提供了一种间接访问对象属性的方式,而KVO则允许我们...

    ios-KVO_Demo.zip

    在iOS开发中,KVO是一种强大的数据绑定工具,它使得我们可以方便地实现模型-视图-控制器(MVC)架构中的数据同步。KVO的基础概念、使用方法以及注意事项将在以下内容中详细阐述。 **1. KVO基础** KVO基于Objective...

    ios-加载网页的滚动KVO方式.zip

    在iOS开发中,加载网页内容通常使用`WKWebView`组件,它是Apple提供的现代Web内容展示框架,替代了早期的UIWebView。本项目“ios-加载网页的滚动KVO方式.zip”探讨了通过Key-Value Observing (KVO)来监听WKWebView的...

    ios-KVO和枚举的简单理解和使用,仅作学习参考.zip

    在iOS开发中,Objective-C和Swift提供了许多机制来帮助我们处理对象的状态变化,其中KVO(Key-Value Observing)和枚举是两种常见的技术。KVO允许我们观察并响应对象属性值的变化,而枚举则是一种组织和管理一组相关...

    iOS OC - MVVM开发模式

    MVVM起源于WPF(Windows Presentation Foundation)领域,后来被广泛应用于Xamarin、React Native以及Swift和Objective-C的iOS开发中。下面我们将详细探讨MVVM的核心概念及其在iOS开发中的应用。 ### 1. MVVM架构...

    iOS KVO 监听frame

    在iOS开发中,Key-Value Observing(KVO)是一种强大的机制,允许对象监听其他对象属性的变化。在标题“iOS KVO 监听frame”中,我们关注的是如何使用KVO来跟踪和响应UI控件(如UIView)的frame属性变化。这在布局...

    IOS KVC和KVO

    在iOS开发中,尤其是在MVVM(Model-View-ViewModel)架构中,这两项技术的应用尤为常见。 ### KVC(Key-Value Coding) KVC是一种非直接的属性访问方式,允许我们通过字符串键来访问和修改对象的属性,而无需知道...

    ios kvo使用

    KVO是Apple为iOS和macOS开发的一种强大的数据绑定机制,它允许一个对象观察另一个对象的特定属性,并在该属性发生变化时自动收到通知。下面我们将深入探讨如何在iOS应用中使用KVO。 ### 1. 注册观察者 使用KVO的第...

    移动开发(IOS) – Objective-C-10-KVC、谓词、KVO与通知 - iOS知识库1

    Objective-C是iOS开发中的主要编程语言,而KVC(Key-Value Coding)、KVO(Key-Value Observing)以及谓词(Predicates)和通知(Notifications)是Objective-C中非常重要的概念,它们提供了灵活的数据访问和对象间...

    ios-脉冲雷达以及动态增减元素--iOS-PulsingRadar-Swift.zip

    在iOS开发中,视图动画是提升用户体验的关键技术之一,特别是在构建吸引人的用户界面时。本文将探讨"ios-脉冲雷达以及动态增减元素"这个项目,它使用Swift编程语言实现了雷达脉冲效果和动态元素增减的功能。该项目源...

Global site tag (gtag.js) - Google Analytics