[KVC系列]底层执行流程

2018-09-17  本文已影响4人  codeTao

KVC系列-底层执行流程

相当于是对KVC官方文档第二部分的一个总结

Search Pattern for the Basic Getter

valueForKey: 方法的默认实现,系统会对消息接收者对象,执行这 5 步:

Search Pattern for the Basic Setter

setValue:forKey: 方法的默认实现,系统会对消息接收者对象,执行这 3 步:

Search Pattern for Mutable Arrays

即方法 mutableArrayValueForKey: 的默认实现。系统会对消息接收者对象,执行这 4 步:

mutableArrayValueForKey:使用场景

Search Pattern for Mutable Ordered Sets

即方法 mutableOrderedSetValueForKey: 的默认实现。系统会对消息接收者对象,执行这 4 步:

1.搜索 insertObject:in <Key> AtIndex: , removeObjectFrom <Key> AtIndex:,或者 insert <Key>: atIndexes: , remove <Key> AtIndexes: 格式的方法。
如果找到至少一个insert方法和至少一个remove方法,那么返回一个可以响应NSMutableOrderedSet所有方法代理集合(类名是 ), 那么给这个代理集合发送NSMutableOrderedSet的方法, 以insertObject:in<Key>AtIndex:, removeObjectFrom <Key> AtIndex :, insert <Key>:atIndexes: remove<Key>AtIndexes: 组合的形式调用。还有两个可选实现的接口: replaceObjectIn <Key> AtIndex:withObject:replace<Key>AtIndexes:with<Key>:

2.如果以上方法,搜索名为set <Key>:方法。 在这种情况下,NSMutableOrderedSet的代理对象每次收到消息时都会向mutableOrderedSetValueForKey:的原始接收者发送一个set <Key>:消息。

3.如果上一步的方法没有找到,再检查类方法+ (BOOL)accessInstanceVariablesDirectly,如果返回YES(默认行为),则按顺序搜索名称如_ <key><key>的成员变量。 如果找打成员变量,那么则\返回的代理对象将它接收的任何NSMutableOrderedSet消息方法直接交给这个成员变量处理。

4.如果还是找不到, 系统会自动调用 setValue:forUndefinedKey: 方法抛出异常。同样子类也可以重载该方法,实现自定义处理。

Search Pattern for Mutable Sets

即方法 mutableSetValueForKey: 的默认实现。系统会对消息接收者对象,执行这 5 步:

由于笔者水平有限,文中如果有错误的地方,或者有更好的方法,还望大神指出。
附上本文的所有 demo 下载链接,【GitHub】
如果你看完后觉得对你有所帮助,还望在 GitHub 上点个 star。赠人玫瑰,手有余香。

上一篇下一篇

猜你喜欢

热点阅读