美文网首页
KVO—手动触发

KVO—手动触发

作者: 一叶知秋0830 | 来源:发表于2019-12-17 15:34 被阅读0次
// Student.h
@interface Student : NSObject

@property (nonatomic , assign) NSInteger score;

- (void)changeScore:(NSInteger)score;

@end


// Student.m
#import "Student.h"
@implementation Student
// 改变成员变量的值
- (void)changeScore:(NSInteger)score{
    _score = score;
}

@end

如上所示的Student类有个score属性,通过KVO添加观察者监听score属性后,可以通过下面3中方式来改变score的值,但只有通过.语法和KVC赋值这两种方式改变score的值时才会触发KVO

Student *stu = [[Student alloc] init];
[stu addObserver:self forKeyPath:@"score" options:NSKeyValueObservingOptionNew context:NULL];

// 通过3中方式改变score
// 方式一:点语法(也就是通过setter方法赋值)
stu.core = 88;

// 方式二:KVC赋值
[stu setValue:@55 forKey:@"score"];

// 方式三:直接更改成员变量的值(不会触发KVO)
[stu changeScore:33];

如果想要第三种方式也能触发KVO的话就需要手动触发,也就是需要将changeScore:方法改成:

- (void)changeScore:(NSInteger)score{

    [self willChangeValueForKey:@"score"];
    _score = score;
    [self didChangeValueForKey:@"score"];
}

相关文章

  • 04. KVO使用,原理,本质

    问题 KVO日常使用 KVO原理(KVO本质是什么) 如何手动触发KVO 直接修改成员变量会触发KVO吗 KVO图...

  • 手动 触发 kvo

    手动 触发 kvo 过程如下: 重写automaticallyNotifiesObserversForKey 返回...

  • 手动触发KVO

    [self willChangeValueForKey:@"属性名称"]; // “手动触发的KVO”[self ...

  • 手动触发KVO

    KVO中,当被观察的属性改变时,KVO被触发。举例如下:KVO监测Person类实例person的name属性。当...

  • KVO—手动触发

    如上所示的Student类有个score属性,通过KVO添加观察者监听score属性后,可以通过下面3中方式来改变...

  • 深入理解KVO

    iOS | KVO | Objective-C KVO的本质是什么,如何手动触发KVO? 1.什么是KVO KVO...

  • KVO

    iOS用什么方式实现对一个对象的KVO 如何手动触发KVO 直接修改成员变量会触发KVO么? KVO [self....

  • KVO的内部实现原理

    关于KVO,首先我们来看两道面试题 KVO的本质是什么?如何手动去触发KVO?直接修改成员变量会触发KVO么? 怎...

  • KVO

    目录 1. KVO的使用1.1 KVO基本使用方法1.2 KVO手动触发模式1.3 KVO属性依赖1.4 KVO容...

  • iOS KVO的手动实现过程

    如何手动触发一个value的KVO 手动实现 willChangeValueForKey 和 didChangeV...

网友评论

      本文标题:KVO—手动触发

      本文链接:https://www.haomeiwen.com/subject/jxtawctx.html