Skip to content

Latest commit

 

History

History
23 lines (16 loc) · 971 Bytes

runtime消息机制.md

File metadata and controls

23 lines (16 loc) · 971 Bytes

runtime消息机制可以帮我调用私有方法

Person *p = objc_msgSend(objc_getClass("Person"),sel_registerName("alloc"));
p = [p init];
objc_msgSend(p, sel_registerName("run:"),20);

实例对象(的类) 是类对象(的类) 是元类对象(的类) 是根元类

什么时候使用runtime,runtime方法都是有前缀的,项目需要的时候,调用一些私有方法或者修改某些系统方法的功能需求。
3.减少书写,逻辑包装,避免分散注意力,更好精神投入工作。方法调用流程

怎么去调用eat方法 ,对象方法:类对象的方法列表 类方法:元类中方法列表,所以runtime拿方法开头是class_
1.通过isa去对应的类对象的方法列表中查找
2.注册方法编号
3.根据方法编号到对应的类对象的方法列表中去查找对应方法分,通过哈希表实现。
4.找到只是最终函数实现地址,根据地址去方法区调用对应函数