oc运行机制是动态的,运行时所执行的代码是由运行环境来决定的,静态的机制是由编译器来决定的,(编译期是指把你的源程序交给编译器编译的过程,最终目的是得到可执行的文件。运行期指的是你将可执行文件交给操作系统(输入文件名,回车)执行、直到程序执行结束的期间,执行的目的是为了实现程序的功能。)
oc是动态绑定,调用编译阶段并不会去绑定执行的函数,只有在运行的时候才回去对象中查找方法,接受方法的类中有个方法列表,如果能找到方法就调用,找不到的话就回去父类中查找
C语言是静态绑定,在编译的阶段就能决定所要调用的函数
消息转发机制
当一个对象无法处理时间的时候会进入消息转发流程,可以通过运行时机制,将我们需要的某个方法加入到类中,这就是运行时添加属性的原理
分类不能直接添加属性是因为分类中没有实现set和get方法,即使手写实现也不能调用,如果加入属性就会崩溃,因为调用的时候找不到set和get方法,这样会进入消息转发机制,此时就可以利用运行时机制,当进入消息转发机制后,利用运行时机制为其生成set和get方法,进而添加属性.
网友评论