ios kvo

本文详细介绍了iOS开发中KVO(键值观察)的基本概念及其使用方法。通过一个简单的示例,展示了如何设置KVO、实现回调方法以及移除观察者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考网上教程 

KVOKey-Value Observing,键与值观察。观察中值改变通过键调用方法,如应用中,视图中数据改变刷新界面的视图。

关键字:1.对象  2.设置对象的KVO  3.实现回调方法, 4.移除观察

简单代码:

1. 新建工程,Single View Application

2.添加 数值类, NSString* kvoStr, kvoStr就是KVO中的 Value,Key在实现时自己添加

#import <Foundation/Foundation.h>
@interface KVOData : NSObject
@property (retain,nonatomic) NSString* kvoStr;
@end
#import "KVOData.h"
@implementation KVOData
@end

3.引用数值类,创建对象,以及对象的KVO,

#import <UIKit/UIKit.h>
#import "KVOData.h"
@interface ViewController : UIViewController
{
    KVOData *kvoData;
}
@end

@implementation ViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    kvoData = [[KVOData alloc]init];
    [kvoData setValue:@"kvo value init." forKey:@"kvoStr"];
    NSLog(@"kvo Str:%@", [kvoData valueForKey:@"kvoStr"] );
    [kvoData addObserver:self
              forKeyPath:@"kvoStr"
                 options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld
                 context:NULL];
}

4.实现回调

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIButton *changeBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    changeBtn.frame = CGRectMake(120, 200, 120, 40);
    changeBtn.titleLabel.text = @"change";
    [changeBtn addTarget:self
                  action:@selector(changeBtnPressed)
        forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:changeBtn];
}

- (void)changeBtnPressed
{
    [kvoData setValue:@"kvo value changed." forKey:@"kvoStr"];
    NSLog(@"changeBtnPressed.");
}
- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
    if ([keyPath isEqualToString:@"kvoStr"]) {
        NSLog(@"%@",[kvoData valueForKey:@"kvoStr"]);
    }
}

5.移除观察

- (void)dealloc
{
    [super dealloc];
    [kvoData removeObserver:self forKeyPath:@"kvoStr"];
    [kvoData release];
}












                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值