runtime介绍
1.什么是rumtime
The Objective-C language defers as many decisions as it can from compile time and link time to runtime. Whenever possible, it does things dynamically. This means that the language requires not just a compiler, but also a runtime system to execute the compiled code. The runtime system acts as a kind of operating system for the Objective-C language; it’s what makes the language work.
Objective-C语言把许多从编译时和链接时的决策推迟到运行时。只要有可能,总是动态的处理。这就意味着,Objective-C不仅需要编译器而且需要一个运行时系统来编译代码。运行时系统作为Objective-C语言的一种操作系统,使Objective-C语言具有动态性。
- 编译时:编译器对源码进行编译的这个阶段,编译时只对代码进行检查比如语法检查,然后将源代码翻译成计算机能够识别的语言。
- 运行时:当编译时完成之后,将代码装载至内存时的阶段。这个时候会对对象的类型进行检查和分析。
runtime是由c、c++及汇编编写完成的一组API,为Objective-C提供运行时功能。
2.runtime版本及平台
不同的Objective-C版本运行在不同的平台
Legacy and Modern Versions
Objective-C runtime有两个版本Legacy
和Modern
.Modern
版本在Objective-C 2.0中引用,其中包含了许多新的特性。Legacy
版本在Obective-C 1.0中被使用。
两个版本的主要区别:
- legacy版本:如果你在类中的布局改变实例变量,你必须从它继承的类重新编译
- 如果你在类中的布局改变实例变量, 你不必从它继承的类重新编译
平台
- iPhone 应用程序和OX v10.5的64位程序以及后来的都是用了
modern
版本 - 其他的程序(OS X 桌面32位程序)使用的是
legacy
版本
3.与runtime的交互方式
与runtime系统进行交互有三种方式:
- 通过使用Objective-C源代码方式
- 通过使用NSObject类里边一些API方式
- 通过使用runtime API的方式
使用源代码方式:通过编译Objective-C代码,编译器会自动创建实现动态语言特性的数据结构及函数的调用。当编译后的代码运行后,runtime系统会自动的工作起来。
使用NSObject类中的API方式:Cocoa中大多数的类都继承于NSObject,所以大多数类都继承了NSObject的方法。NSObject中一些方法会调用runtimeAPI.比如:isKindOfClass:
, isMemberOfClass:
,conformsToProtocol:
,methodForSelector:
等方法。
直接使用runtime API的方式:runtime是由c、c++及汇编写成的一组API,为oc代码提供运行时功能。当我们直接使用runtime所提供的API接口便可以和runtime系统进行交互。
网友评论