第一条:了解Objective-C的起源
Objective-C使用“消息结构”(messaging structure)而非“函数调用”(function calling)机制。
消息机制与函数调用的区别在于:
1.使用消息结构的语言,其运行时所应执行的代码由运行时环境决定;
2.使用函数调用的语言,其运行时所应执行的代码由编译器决定;
3.如果函数是多态的,那么在运行时就要按照“虚方法表”来查找到底应该执行哪个函数实现
4.而采用消息结构的语言,不论是否多态,总是在运行时才会去查找所要执行的方法。
5.采用消息结构的语言,编译器也不关系接受消息的对象的类型,在运行时才会去处理,其过程叫做“动态绑定”,在运行时才会检查对象类型
Objective-C的重要工作都由“运行期组件”(runtime component)而非编译器来完成。
运行期组件:本质上就是一种与开发者所编代码相链接的“动态库”,能把开发者所编写的所有程序粘合起来。
所有的Objective-C对象所占的内存空间总是分配在“堆空间”(heap space)中,而绝不会分配在“栈”(stack)上。
如果有一个新的变量,指向同一对象地址,那么并不拷贝对象,只是这两个变量都指向此对象。
分配在堆中的内存必须由程序员直接管理,而分配在栈上的内存会在“栈帧”(stack frame)弹出时自动清理。
【要点】
Objective-C 为C语言添加了面向对象特性,是其超集。Objective-C使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。接收一条消息后,究竟应执行何种代码,由运行时环境而非编译器来决定。
理解C语言的核心概念有助于写好Objective-C程序。尤其要掌握内存模型与指针。