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 的自动归档和解档
网友评论