一消息结构 和 函数调用的区别
Objective -C 是由Smalltal(70年代的语言)演化而来。Smalltal是最早的消息语言,消息结构和函数调用之间的区别如下:
1.1消息结构 (Objective-c)
NSObject *obj = [[NSObject alloc]init];[obj performWith:参数1 and:参数2];
1.2 函数调用 (C++)
Object *obj = new Object;obj->perform(parameter1,parameter2);
两者主要的区别在于:消息结构的语言,运行时所应执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。
如果代码中调用的函数是多态的,函数调用的语言,会在运行时就要按照"虚方法表(virtual table)"来查出应该执行那个函数实现。而消息结构的语言,不论是否多态,总是在运行时才会去查找索要执行的方法。编译器甚至不关心接受消息的对象是何种类型。接受消息的对象也要在运行时处理,这个过程也叫"动态绑定"
二运行期组件(runtime component)
Objective-c 的重要工作都是由运行期组件(runtime component)而非编译器来完成,使用Objective-C的面向对象特性所需的全部数据结构和函数都在运行期组件里面。
例如:运行期组件中含有全部内存管理方法。运行期组件的本质上就是一种与开发者所编代码相链接的"动态库"(dynamic library),其代码能把开发者所编的所有程序粘合起来。这样的话,只需要更新运行期组件,就可以提升应用程序性能。而那种许多工作都在"编译器"完成的语言,想要获得类似的性能提升,则需要重新编译运用程序代码。
三总结
Objective-c 使用动态绑定的消息结构,在运行时才会检查对象类型,接受消息后,应该执行什么代码,有运行期环境而非编译器来决定