Runtime深度解析以及实用技巧(不扯淡,不套路)
2017-05-15 本文已影响1780人
穿山甲救蛇精
当我还是一个彩笔时,本着一颗向上的心,鼓足勇气,当打开别人的博客时,哇塞,好牛逼啊,完全看不懂啊,看来我没有天分啊。
如今我变成了一个饱受你们连番套路的彩笔,只想说,你们扯那么多蛋有什么用,吓得多少人去卖房了,把晦涩的名词当作自己装逼的基础,把简单的逻辑写复杂当作自己牛逼的标志。最重要的是有些很有质量的底层讲解,你copy过去也就算了,你不拍版是什么鬼,你少copy几行是什么鬼,你还加入你自己错误的认知是什么鬼。
首先我们要明确,Object-C是动态语言,也就是说在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。这才产生了Runtime强大的功能特性,所以,不要和你们安卓的同事说:
- 这个简单,临时把这个两个对象链接一下,然后取出来。
- 把这两个方法交换一下,相同功能模块统一处理。
- 这个方法你动态添加一下喽。
-
等等
Runtime(也就是运行时),它基本上是用C和汇编写的,这个库使得C语言有了面向对象的能力。所以习惯了面向对象编程的小伙们好像对于C的API一般都不太友好,但是又有很多C的API强大到别人问你你不知道那你都抬不起头,Runtime就是其中之一。关于它的传说有很多,可以说在有的人手里牛逼的不可一世。下面我们毫无保留,毫无套路的说几个非常好用的使用场景:
Runtime奇技淫巧__带你深入理解Runtime特有概念
Runtime奇技淫巧__不受限制的消息发送
Runtime奇技淫巧__获取类的实例变量以及属性并强势与KVC、msgSend混用
Runtime奇技淫巧__方法交换
Runtime奇技淫巧__动态链接对象以及给分类添加属性
Runtime奇技淫巧__动态添加方法,消息转发改善异常
上面就是我想说的全部内容,我想你大概应该差不多了解OC这门语言到底是个什么东西了。然而如果你是个死脑筋,这对于你也并没有什么卵用。有很多人都说你写的这个知识点太low了,我们都会,或者我根本不关心底层原理,其实有很多人会用但是并不知道原理,也有很多人知道原理但遇到问题根本想不到对应的解决方案!那么问题来了,那下面该写点什么呢?