Runtime初步探析

2020-04-11  本文已影响0人  雨林QiQi

一、基本概念解析

1.对象的本质——结构体

2.方法的本质——发送消息

3.消息的组成

LGPerson *p = [[LGPerson alloc] init];

[prun];

((void (*)(id, SEL))(void *)objc_msgSend)((id)p, sel_registerName("run"));

void *)objc_msgSend)((id)p——消息接收者

sel_registerName("run") ——方法编号-name

sel_registerName("run")=@selector(run)

imp——函数实现的指针。通过sel找到imp,即通过方法编号找到方法的实现。

4.runtime调用方法的三种方式

4.1通过runtime API

4.2通过NSObject API

4.3OC上层方法 @selector

5.方法

对象方法存在

类方法存在

类方法的元类的存储姿态是“对象方法”

对象在类里是一个实例

类在元类里也是一个实例

6.objc_msgSend

快速:缓存-汇编-cache_t-哈希表

慢速:C、C++ 

7.源码分析流程

8.source

source0:signal->wakeup Runloop

处理App自己的事件,管理自己的事务,UIEvent、CFSocket

source1:mach_port和回调指针

处理线程之间通信

上一篇 下一篇

猜你喜欢

热点阅读