美文网首页
[12]KVO的取值以及[self class] 和 [supe

[12]KVO的取值以及[self class] 和 [supe

作者: 默然走一生 | 来源:发表于2019-05-10 09:29 被阅读0次

kvo取值的顺序:


    self.demoView = [[DemoView alloc] init];
    [self.demoView addObserver:self forKeyPath:@"demoTestStr" options:NSKeyValueObservingOptionNew context:nil];
    [self.demoView setDemoTestStr:@"456"];
    [self.demoView setValue:@"uuu" forKey:@"demoTestStr"];

只会字一个。只有注释了上面的 才会走下面的。
//先走这个
- (id)valueForKey:(NSString *)key
{
    return @"valueForKey";
}
//然后取这个
- (id)valueForKeyPath:(NSString *)keyPath
{
    return @"valueForKeyPath";
}
//取这个
- (NSString *)demoTestStr
{
    return @"demoTestStr";
}
//最后取这个
- (id)valueForUndefinedKey:(NSString *)key
{
    return @"valueForUndefinedKey";
}

如果设置了    NSString * _demoTestStr;
就不会崩溃了

1. 下面的代码分别输出什么?


@implementation Son : Father
- (id)init {
    self = [super init];
    if (self) {
        NSLog(@"%@", NSStringFromClass([self class]));
        NSLog(@"%@", NSStringFromClass([super class]));
    }
    return self;
}
@end

答案:都输出”Son”

解释:objc中super是编译器标示符,并不像self一样是一个对象,遇到向super发的方法时会转译成objc_msgSendSuper(...),而参数中的对象还是self,于是从父类开始沿继承链寻找- class这个方法,最后在NSObject中找到(若无override),此时,[self class]和[super class]已经等价了。

相关文章

网友评论

      本文标题:[12]KVO的取值以及[self class] 和 [supe

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