你要知道的runtime都在这里
转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639205
本文主要讲解runtime
相关知识,从原理到实践,由于包含内容过多分为以下五篇文章详细讲解,可自行选择需要了解的方向:
- 从runtime开始: 理解面向对象的类到面向过程的结构体
- 从runtime开始: 深入理解OC消息转发机制
- 从runtime开始: 理解OC的属性property
- 从runtime开始: 实践Category添加属性与黑魔法method swizzling
- 从runtime开始: 深入weak实现机理
本文是系列文章的第一篇文章从runtime开始: 理解面向对象的类到面向过程的结构体,主要从runtime
出发讲解面向对象的类是如何转变为面向过程的结构体,来探究OC对类的处理本质。
什么是runtime
runtime
就是运行时,在实际开发中使用runtime
的场景并不多,但是了解runtime
有助于我们更好的理解OC的原理,从而提高开发水平。
runtime
很强大,是OC最重要的一部分也是OC最大的特色,可以不夸张的说runtime
成就了OC,尽管runtime
是OC的一个模块而已。
我们都知道高级编程语言想要成为可执行文件需要先编译为汇编语言再汇编为机器语言,机器语言也是计算机能够识别的唯一语言,但是OC并不能直接编译为汇编语言,而是要先转写为纯C语言再进行编译和汇编的操作,从OC到C语言的过渡就是由runtime
来实现的。然而我们使用OC进行面向对象开发,而C语言更多的是面向过程开发,这就需要将面向对象的类转变为面向过程的结构体,本文正是通过runtime
源码分析来讲解runtime
是如何将面向对象的类转变为面向过程的结构体。
深入代码理解instance、class object、metaclass
面向对象编程中,最重要的概念就是类,下面我们就从代码入手,看看OC是如何实现类的。
前文一直在说runtime
将面向对象的类转变为面向过程的结构体,那这个结构体到底是什么样子的?打开#import<objc/objc.h>
文件,可以发现以下几行代码
/// An opaque type that represents an Objective-C class.
typedef struct objc_class *Class;
/// Represents an instance of a class.
struct objc_object {
Class isa OBJC_IS