Objective-C语言起源
Objective-C与C++,Java等面向对象语言类似,不过在许多方面却有所差别。
Objective-C使用“消息结构(messaging structure)”而非“函数调用(function calling)”。Objective-C语言由Smalltalk演化而来,Smalltalk是消息型语言的鼻祖。
消息与函数调用的区别如下:
// Messaging (Objective-C) Object *obj = [Object new]; [obj performWith:parameter1 and:parameter2]; // Function Calling (C++) Object *obj = new Object(); obj->perform(parameter1, parameter2);
关键区别:使用消息结构的语言,其运行时所执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。
如果范代码中调用的函数是多态的,那么在运行时就要按照“虚方法表(virtual table)”来查出到底应该执行哪个函数实现。
采用消息结构的语言,不论是否多态,总是在运行时去查找所要执行的方法。实际上,编译器甚至不关心接收消息的对象是何种类型。接收消息的对象问题也
要在运行时处理,其过程叫做“动态绑定(dynamic binding)”。
Objective-C的重要工作都是由“运行期组件(runtime component)”而非编译器完成。使用Objective-C的面向对象特性所需要的全部数据结构及函数都在运行期组件里边。例如:运行期组件包含全部内存管理方法。运行期组件本质就是一种 与开发者所编代码相链接的“动态库(dynamimc library)”,其代码能把开发者编写的所有程序粘合起来。这样,只需要更新运行期组件,即可提成应用程序的性能。而那种许多工作都在“编译期(compile time)”完成的语言,若想获得类似的性能提升,则要重新编译应用程序代码。
NSString *someString = @"The String"; // OK NSString stackString; // Error : interface type cannot be statically allocated
所有的OC对象所占内存总是分配在“堆空间(heap space)”中,而绝不会分配在“栈(stack)”上。
要点:
1. Objective-C为C语言添加了面向对象特性,是其超集。Objective-C使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。接收一条消息后,究竟应执行何种代码,由运行期环境而非编译器来决定。
2. 理解C语言的核心概念有助于写好Objective-C程序。尤其要掌握内存模型与指针。

浙公网安备 33010602011771号