介绍-runtime学习一

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有两个版本LegacyModern.Modern版本在Objective-C 2.0中引用,其中包含了许多新的特性。Legacy版本在Obective-C 1.0中被使用。

两个版本的主要区别:

  • legacy版本:如果你在类中的布局改变实例变量,你必须从它继承的类重新编译
  • 如果你在类中的布局改变实例变量, 你不必从它继承的类重新编译

平台

  • iPhone 应用程序和OX v10.5的64位程序以及后来的都是用了 modern版本
  • 其他的程序(OS X 桌面32位程序)使用的是legacy版本

3.与runtime的交互方式

与runtime系统进行交互有三种方式:

  1. 通过使用Objective-C源代码方式
  2. 通过使用NSObject类里边一些API方式
  3. 通过使用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系统进行交互。

你可能感兴趣的:(介绍-runtime学习一)