网上已经有很多关于objc运行时特性的详细分析,本来没有再写的必要。
但发现公司的小伙伴理解起来比较吃力,感觉是学习方法不对,之前也说过,通过原理学习理解起来更透彻,而且也没必要一个个特性去学习和记忆,理解原理后,需要时再去查阅相关api就好了。
恩,blog的东西基本都是给公司做技术分享用的。
只需要几十行代码就可以模拟最简单的运行库,代码什么都干不了,只是可以运行起来,用于我们理解objc的实现原理。
代码地址: objc_runtime
代码里的注释已经描述了基本运行时,大家可以直接源码里看。
-
objective c语言具有动态类型语言的特征,但它不是通过动态语言的解释器方式工作,而是本地二进制运行,因此,兼具动态特征与本地性能的折中。
-
实现原理:通过本地c语言抽象出对象、多态的概念,封装成运行库,在编译器侧建立面向对象语言的语法,编译器将语法预编译为c语言,在编译到本地目标文件。
-
在objective c中,有对象和类,还有元类的概念,类一般保存实例方法,元类保存静态方法。
-
通过实现,可以看出在实现侧对象、类、元类都是内存中运行时的对象,没有本质区别,唯一区别仅仅是职责分工不同,也正因为都是内存中的对象,所以在运行时可以做到动态修改。
-
封装:通过结构体封装属性和方法实现
-
继承:通过superClass指向父类实现
-
多态:通过动态方法查找实现
-
既然所有内容均在内存中,意味着一切都可运行时修改,包括对象、类、元类、继承关系、方法、属性等等。
这里关于objc的运行时特性基本一个都没说,但如果你看明白了demo,我想无论哪个特性,大概看一眼就能明白是怎么回事儿了。
objective c语言被人诟病为类型不安全,这其实是取舍问题,想要这么强大的动态特性,必然要在其他方面做些牺牲。