IOS runtime

2018-01-24  本文已影响1人  小暖风

1.对象能够接收的消息列表保存在它所对应的类中。类能够接受的消息列表保存在它所对应的元类中。

2.可以在类别中,给类添加属性,譬如 给 NSString对象添加 是否为空的属性,get方法返回结果,set方法实现逻辑。objc_setAssociatedObject,objc_getAssociatedObject。这两个API方法。

runtime(简称运行时),是一套 纯C(C和汇编写的) 的API。而 OC 就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制。

消息机制原理:对象根据方法编号SEL去映射表查找对应的方法实现。

调用对象方法的本质是给对象发送消息。

消息机制方法调用流程:

对象方法:(保存到类对象的方法列表) ,类方法:(保存到元类(Meta Class)中方法列表)。

1.OC 在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象对应的类或其父类中查找方法。。

2.注册方法编号(这里用方法编号的好处,可以快速查找)。

3.根据方法编号去查找对应方法。

4.找到只是最终函数实现地址,根据地址去方法区调用对应函数。

一个objc对象的isa的指针指向什么?有什么作用?

每一个对象内部都有一个isa指针,这个指针是指向它的真实类型,根据这个指针就能知道将来调用哪个类的方法。

runtime 常见作用

动态交换两个方法的实现

动态添加属性

实现字典转模型的自动转换

发送消息

动态添加方法

拦截并替换方法

实现 NSCoding 的自动归档和解档

上一篇下一篇

猜你喜欢

热点阅读