美文网首页
iOS KVC的理解与crash场景

iOS KVC的理解与crash场景

作者: 波吉c | 来源:发表于2020-09-05 11:05 被阅读0次

实现原理:
KVC的赋值本质上只是调用了属性的setter方法,setter方法会按照setKey、_setKey、setIsKey的优先级进行调用,还没有,则按_key、_isKey、key、isKey查找成员变量。

如果accessInstanceVariablesDirectly返回NO,则不会查找_key、_isKey、key、isKey,会直接调用- (void)setValue:(id)value forUndefinedKey:(NSString *)key。

若查找到isKey还是没找到,也会调用(void)setValue:(id)value forUndefinedKey:(NSString *)key,该方法默认会抛出异常。


1877784-f493a8e49c8cbe5b.png

crash的场景:
key 不是对象的属性,造成崩溃。
keyPath 不正确,造成崩溃。
key 为 nil,造成崩溃。
value 为 nil,为非对象设值,造成崩溃: [objc setValue:nil forKey:@"age"];

crash的防护:
load方法中对setValue: forUndefinedKey:和valueForUndefinedKey方法做方法替换,判断key或value为nil时return;

截屏2020-09-06 上午11.13.51.png

相关文章

网友评论

      本文标题:iOS KVC的理解与crash场景

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