Runtime

2016-08-02  本文已影响9人  西门丨不吹雪

Runtime是什么

Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的。比如:

[receiver message];
// 底层运行时会被编译器转化为:
objc_msgSend(receiver, selector)
// 如果其还有参数比如:
[receiver message:(id)arg...];
// 底层运行时会被编译器转化为:objc_msgSend(receiver, selector, arg1, arg2, ...)

为什么需要Runtime

Runtime 的作用:OC 在三种层面上与 Runtime 系统进行交互

  1. 通过 Objective-C 源代码
    只需要编写 OC 代码,Runtime 系统自动在幕后搞定一切,调用方法,编译器会将 OC 代码转换成运行时代码,在运行时确定数据结构和函数。

  2. 通过 Foundation 框架的 NSObject 类定义的方法
    Cocoa 程序中绝大部分类都是 NSObject 类的子类,所以都继承了 NSObject 的行为。(NSProxy 类时个例外,它是个抽象超类)
    一些情况下,NSObject 类仅仅定义了完成某件事情的模板,并没有提供所需要的代码。例如 - description方法,该方法返回类内容的字符串表示,该方法主要用来调试程序。NSObject类并不知道子类的内容,所以它只是返回类的名字和对象的地址,NSObject的子类可以重新实现。
    还有一些NSObject的方法可以从Runtime系统中获取信息,允许对象进行自我检查。例如:
    -class方法返回对象的类;
    -isKindOfClass: 和 -isMemberOfClass: 方法检查对象是否存在于指定的类的继承体系中(是否是其子类或者父类或者当前类的成员变量);
    -respondsToSelector: 检查对象能否响应指定的消息;
    -conformsToProtocol:检查对象是否实现了指定协议类的方法;
    -methodForSelector: 返回指定方法实现的地址。

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

runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?

---->>>>Runtime详解(面试必备)

上一篇 下一篇

猜你喜欢

热点阅读