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程序。尤其要掌握内存模型与指针。

posted @ 2016-02-16 13:27  若离相惜  阅读(129)  评论(0)    收藏  举报