@chenbinghua
2015-09-14T10:45:48.000000Z
字数 957
阅读 1550
iOS笔记
阅读参考
发光的我 【iOS】34.初识Objective-C Runtime
Glow 技术团队博客 Objective-C Runtime
Chun Tips 刨根问底Objective-C Runtime
Chun Tips 推荐的一篇翻译博客 Understanding the Objective-C Runtime
南峰子的技术博客 Objective-C Runtime
Objective-C Runtime的数据类型
阳神的博客 神经病院objc runtime入院考试 4道题目
Objective-C 扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的消息传递机制。而这个扩展的核心是一个用 C 和 编译语言 写的 Runtime 库。它是 Objective-C 面向对象和动态机制的基石。
Objective-C 是一个动态语言,这意味着它不仅需要一个编译器,也需要一个运行时系统来动态得创建类和对象、进行消息传递和转发。
在 Objective-C 中,类、对象和方法都是一个 C 的结构体。具体可参考Objective-C Runtime的数据类型。
我们常说的向某个对象发送一条消息,如
[person setAge:20];
在编译这句话是会翻译成一个C语言的函数调用
objc_msgSend(person,@selector(setAge:),20);
其中objc_msgSend()就是runtime的核心函数,OC的动态性体现出,函数的调用从编译和链接的时候,推迟到运行时。
给一个对象发送的一个消息并不会立即执行,而是在运行的时候再去寻找他对应的实现。那么你就可以:
那么这个消息机制到底是怎么运作的呢,这还真是个复杂的过程,这还需要从Objective-C的对象模型讲起。
理解
阳神的博客 神经病院objc runtime入院考试 4道题目
动态创建一个类
Method Swizzling
关联对象
利用RunTime进行模型归档
实现字典和对象模型之间的互换,如MJExtension框架
自己实现KVO