Runtime 基本介绍(一)

1.Runtime是什么

Runtime又叫运行时,是iOS内部核心之一,起底层实现是C语言,平时调用的活着编写的OC代码,底层基本都是基于Runtime实现的。比如:

[rereiver message];底层运行时会被编译器自动转为:objc_msgSend(recveiver,selector); 如果带有参数的话:[receeiver message:(id)arg...]; 底层运行时会被编译器转为:objc_msgSend(receiver,selector,arg1,arg2...)

2.使用Runtime 的原因

1.OC 是一门动态语言,他将一部分工作放在了运行时才处理而不是编译时处理。有很多类和成员变量在编译时我们时不知道的,而在运行时,我们所编写的代码才会转换成完整的确定的代码去运行。因此,仅仅只有一套编译器是不够的额,还需要一套运行时系统(Runtime System)来处理编译后的工作。

2.Runtime 基本是用C语言和汇编语言来编写的,动态系统使用高效。

3.Runtime的作用

OC 在三种层面上与Runtime 系统进行交互

1.通过OC源代码

只需要编写OC代码,Runtime系统自动在幕后搞定一些,调用方法,编译器会将OC代码转换成运行时代吗,在运行时确定数据结构和函数。

2.通过对 Runtime库函数的直接调用

Runtime系统具有公共接口的动态共享库,头文件存在于/usr/include/objc目录下,这意味着我们使用时只需要引入objc/Runtime.h头文件即可。许多函数可以让你使用C代码来实现Objc同样的功能。除非是写一些Objc与其他语言的桥接或着是底层的debug工作,你在写Objc代码时,一般不会用到这些C语言函数。

3.通过Foundation框架的NSObject类来定义的方法

Cocoa程序中绝大部分类都是NSObject类的子类,所以都继承了NSObject的行为。(NSProxy类是个例外,他是个抽象类)。一些情况下,NSObject类仅仅定义了完成某件事情的模版,并没有提供所需要的代码。例如 - description方法,该方法返回类内容的字符串表示,该方法主要用来调试程序。NSObject类并不知道子类的内容,所以他只返回类的名字和对象的地址,NSObjecta的子类,可以重新实现。

还有一些NSObject的方法,可以从Runtime系统中获取信息,允许对象进行自我检查。例如:

-class 方法返回当前对象的类

-isKindOfClass:和-isMemberOfClass:方法检查对象是否存在于指定的类的额继承体系中(是否是其子类或着父类或着当前类的成员变量);

-responseToSelector:检查对象是否响应指定的消息;

-conformsToProtocol:  检查对象是否实现了指定协议类的方法;

-methodForSelector: 返回指定方法实现的地址。

 

本文来源自其他文章

 

 

你可能感兴趣的:(Runtime)