原来想写一下Runtime的实际应用,想了一下,自已才疏学浅,除了关联对象和Method Swizzle。但这两个知识点很多高人写得都很好,我觉得直接转一下就好了。哈哈~
##Encode小技巧
突然想起还有个encode的小技巧,虽然我觉得应该不少人知道这个吧,但作为一个代码段,我觉得这个小技巧还是挺有用的。主要是利用反射获取类的成员变量名,再加上KVO就可以获取值与设值。
在前面我们讲到[receiver message]
会被编译器转化为
objc_msgSend(receiver, @selector(message))
同时,我们也知道在一个对象里面有个methodLists
这样子的属性。今天我们就讲下大概是什么调用方法的呢?
首先判断一下receiver对象是否为空,在Objective-C中向nill发送消息是不会Crash的,取出receiver
对象里面的cache
方法列表,在里面查找方法。找不到的话,那就从methodList
方法里面查找。如果再找不到,就按照我们之前说的元类那个图一样,一层一层往父类找。直到找到为止,如果确实找不到,那就执行消息转发。如下图:
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.