第一篇: 了解 Objective-C语言的起源
介绍: Objective-C 通过一套全新的语法,在C语言基础上添加了面向对象特征。
1、消息结构
- 与大多数面向对象语言不通的是,Objective-C使用“消息结构”而非“函数调用”。Objective-C语言是由 Smalltalk 演化而来的,后者是消息语言的鼻祖。在语法上得区别是使用[]来“调用”方法,确切的说是发送消息。
- 关键区别在于: 使用消息结构的语言,其在运行时执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。
- 函数调用: 当代码中调用的函数是多态的,那么在运行时就要按照“虚方法表”来查找到底执行哪个函数实现。
- 消息结构: 而采用消息结构的语言,不论是否多态,总是在运行时才会去查找所要执行的方法。这个过程叫做“动态绑定”。
2、运行期组件
- Objecttive-C 的重要工作都是由”运行期组件”而非编译器来完成。使用 Objective-C的面向对象特性所需的全部数据结构及函数都在运行组件里面。举例来说,运行组件中含有全部内存管理方法。运行组件本质上就是一种与开发者所编代码相链接的”动态库”, 其代码能把开发者编写的所有程序粘合起来。这样的话,只需要更新运行期组件,即可提醒应用程序性能。而那种许多工作都在”编译期”完成的语言,若想获得类似的性能提升,则要重新编译应用程序代码。
3、Objective-C 和 C
- Objective-C是C的”超集”, 所以C语言中的所有功能在编写Objective-C代码时依然适用。因此,必须同时掌握C与Objective-C这两门语言的核心概念,方能写出搞笑的Objective-C代码。
- C语言中的堆栈
a. 分配在堆中的内存必须直接管理,而分配在栈上用于保存变量的内存会再其栈帧弹出时自动清理
b. Objective-C将堆内存管理抽象处理啊。不需要用malloc 及free来分配或是否对象所占内存。Objective-C运行期环境把这部分工作抽象为一套内存管理架构,名叫”引用计数器”
- 结构体和对象
整个系统框架都在适用这个种结构体, 因为如果改用 Objective-C对象来做的话, 性能会受影响。与创建结构体相比,创建对象还需要额外开销,例如分配及释放堆内存等。如果只需要保存 int、float、double、char等”非都系类型”, 那么通常适用CGRect这种结构体就可以了。
4、要点
- 一、Objective-C为C语言添加了面向对象特性, 是其超集。
- 二、Objective-C使用动态绑定的消息结构, 也就是说, 在运行时才会检查对象类型。接收一条消息后, 究竟执行何种代码, 由运行期环境而废编译器来决定。
- 三、理解C语言的核心概念有主意写好Objective-C 程序。 尤其要掌握内存模型与指针。