美文网首页
手动设定实例变量的KVO

手动设定实例变量的KVO

作者: 御雪飞斐 | 来源:发表于2019-04-25 16:56 被阅读0次

    前情提要:
    KVC 和KVO的keyPath一定是属性?
    :NO,KVC 默认支持实例变量。一个对象设定为属性,是默认支持KVO的。如果这个对象是一个实例变量,那么就需要我们手动实现KVO了,如下:

    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface Person : NSObject
    {
        NSString *_age;
    }
    
    - (void)setAge:(NSString *)age;
    - (NSString *)age;
    @end
    
    NS_ASSUME_NONNULL_END
    
    //手动设定KVO
    - (void)setAge:(NSString *)age {
        [self willChangeValueForKey:@"age"];
        _age = age;
        [self didChangeValueForKey:@"age"];
    }
    
    - (NSString *)age {
        return _age;
    }
    
    + (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key {
        BOOL isBool = [super automaticallyNotifiesObserversForKey:key];
        //如果监听到键值为age,则指定为非自动监听对象
        if ([key isEqualToString:@"age"]) {
            isBool = NO;
        }
        return isBool;
    }
    

    相关文章

      网友评论

          本文标题:手动设定实例变量的KVO

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