run-time机制
run-time是一个对象,保证了oc的动态属性。run-time自定义了一些数据结构和库方法,你能使用这些接口实现oc runtime系统进行交互,比如可以添加类和方法,在加载类的时候获得类的定义。
不同的平台有不同的run-time版本
oc程序和runtime系统在3个方面相互作用: 通过oc源码 通过foundation里定义的nsobject类 通过直接调用runtime方法
大部分时候,runtime系统自动工作工作,你只需要编写和编译oc源码就可以了。当你编译包含oc的类和方法时,编译器创建数据结构和函数用以实现语言的动态属性
runtime系统是一个包含了数据结构和方法的库,这些方法和数据结构声明在/usr/include/objc的头文件里。很多方法允许你使用纯c替代oc代码。这些函数让开发其他在runtime系统中开发其他接口和创造工具成为可能,在写oc时虽不需要但是一些runtime方法可能对你写oc代码有帮助。
messaging:
The objc_msgSend Function
在oc里,message在runtime运行时才绑定到方法实现,objc_msgSend这个消息函数做了很多以保证其动态属性:
1、它首先会去找selector方法的实现。由于相同的方法可以通过不同的类实现不同的实现,所以它找到的精确过程取决于接收方的类。
2、调用实现,传值(数据指针),并为该方法指定任何参数
3、将方法实现的返回值作为自己的返回值
注意:编译器会直接生成的调用,而不需要程序员手动调用
消息传递的关键在于编译器为每个类和对象构架的结构,每个类结构包含一下两个基本元素:
1、父类指针
2、类调用表。
当一个消息传递给一个对象,消息传递函数遵循对象对类结构的ISA指针,它在调度表中查找方法选择器。