一、基本概念解析
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和回调指针
处理线程之间通信
网友评论