1.Runtime 版本和平台
这是不同的版本 对于oc runtime 在不同的平台
2.传统和现代的版本
有Objective-C的runtime-“现代”与“传统”的两个版本。现代版与Objective-C的2.0推出,包括一些新的特点。编程接口,运行时的旧版本在Objective-C运行时1参考描述;编程接口,为现代版的运行时的Objective-C运行参考描述。
最显着的新功能是,在现代运行时实例变量是“非脆弱”:
在传统运行时,如果你改变实例变量的布局中的一类,你必须编译继承它的类。
在现代运行时,如果你改变实例变量的布局中的一类,你不必重新编译继承它的类。
在现代运行时,如果你改变实例变量的布局中的一类,你不必重新编译继承它的类。
此外,现代的运行时支持实例变量合成为声明的属性(见Objective-C编程语言属性声明)。
二.与运行时交互
Objective-C程序与三个不同层次的运行时系统交互:通过Objective-C的源代码;通过NSObject类Foundation框架中定义的方法;并通过直接调用运行时函数
1.Objective-C的源代码
在大多数情况下,运行时系统自动地和幕后工作。你只需通过编写和编译的Objective-C源代码中使用它
当您编译包含代码的Objective-C的类和方法,编译器创建的数据结构和实现语言的动态特性的函数调用。数据结构捕获种类和类别的定义,并在协议声明中找到的信息;它们包括在Objective-C编程语言定义一个类和协议讨论类和协议的对象,以及选择的方法,实例变量模板,以及从源代码蒸馏水等信息。主体运行时功能是发送消息,如消息所描述的。它由源代码的消息调用表达式
2.NSObject的方法
3.消息
消息表达式如何转换为objc_msgSend函数调用,以及如何按名称引用的方法。然后,它解释了如何利用objc_msgSend的优势,以及如何,如果需要,你可以规避动态绑定
3.1该objc_msgSend功能
消息函数做任何事要做必要的动态绑定
(1)首先找到程序(方法实现),选择器参考到这个程序。因为同样的方法,可以通过单独的类不同的方式实现,即它找到确切过程取决于类的接收机的
(2)之后他告诉程序,它传递的接收对象(一个指针,它的数据)以及为方法指定任何参数
(3)最后,它将程序的返回值传递为它自己的返回值
注意:编译器生成调用消息传递函数的调用,你不应该直接在你写的代码中直接调用它。
信息传递的关键在于编译器为每个类和对象生成的结构。每一类结构都包含了这2个基本要素
(1)一个指向父类;
(2)一类调度表,
这个表项关联方法选择器与他们识别方法的类的具体地址,在选择的方法是:在setorigin(与地址相关的程序,实现了se