1.什么是runtime

参考资料和博客比较多:

  1. 官方文档:Objective-C 2.0运行时系统编程指南
  2. joy的文章:读 Runtime 源码:类与对象
    读 Runtime源码:对象与引用计数
  3. 冰霜的文章:isa和Class
    如何正确使用Runtime
    消息发送与转发
  4. draveness的文章(没看完)
  5. Effective Objective-C 2.0 这本书
一. runtime介绍

objective-c是一个动态语言,使用消息结构而非函数调用。使用函数调用的语言,其运行时执行的代码,在编译时就已经决定了。使用消息结构的语言,在编译阶段,只是确定要向接受者发送一条消息,而如何响应和处理消息,执行的代码需要在运行时根据运行环境决定。

runtime又叫运行时, 是一套底层的C语言的API,是oc语言的运行时系统。

oc在三个层面与runtime系统进行交互:

1. 通过objective-c源码。

一般情况开发者只需要编写 OC 代码即可,Runtime 系统自动在幕后把我们写的源代码在编译阶段转换成运行时代码,在运行时确定对应的数据结构和调用具体哪个方法。

2. 通过类NSObject的方法

Cocoa程序中绝大部分类都是NSObject类的子类(除了NSProxy类),所以大部分都继承了NSObject类的方法。
某些 NSObject 的方法只是简单地从运行时系统中获得信息,从而允许对象进行一定程度的自我检查。

// 检查对象是否存在于指定的类的继承体系中
- (BOOL)isKindOfClass:(Class)aClass;
- (BOOL)isMemberOfClass:(Class)aClass;

// 检查对象是否响应协议
- (BOOL)conformsToProtocol:(Protocol *)aProtocol; 

 // 检查对象是否响应方法
- (BOOL)respondsToSelector:(SEL)aSelector;

// 返回指定方法的IMP
- (IMP)methodForSelector:(SEL)aSelector; 
3. 通过直接调用runtime库的函数

Objective-C Runtime Reference

可以直接用runtime库的函数

你可能感兴趣的:(1.什么是runtime)