iOS专题

runtime 框架整理

2019-11-27  本文已影响0人  没有格子衫

runtime初探

runtime

C C++ 汇编写成的API
OC 运行时

早期版本Objctive-C 1.0 中32位的Mac OSX的平台

源码解析

id objc_msgSend(id self, SEL, _cmd,...)

汇编跟进来

ENTRY _objc_msgSend

注意跟对架构 objc-msg-arm64.s

runtime 三种调用方式

(class_ ,objc_ .....)

(isKindOf:,isClassOf:......)

objc_msgSend 发送消息

tagged pointer 特殊的数据类型

源码分析流程

1, 方法查找

汇编部分:
C / C++

2, 动态方法解析

3, 消息转发

runtime 应用调用


runloop

KVC

KVO

运行时

代码 -- 编译连接 -- 执行

对于C函数就是静态性,编译如果不存在这个run函数,就会报错,但是OC 不一样。

OC代码run起来之后,会被装在进内存。不存在函数运行时不会报错,只有到调用的时候,如果不存在这个函数方法,OC才会报错。

类方法 元类 -- 姿态 实例方法

对象 在 类 实例

类 在元类 实例

编译时

编译时,就是编译器把源代码翻译成机器能够识别的语言。

代码跑起来,被装填到内存中去。

OC swift java

高级语言,可读性较强,不会被机器所识别,需要转成机器语言汇编,最终会转换成二进制

OC对象

OC 对象 - 本质 -- 结构体

编译 clang

Person *p = [[Person alloc] init];
Person *p = ((Person ()(id, SEL))(void *)objc_msgSend)((id)objc_getClass("Person"), sel_registerName("new"));

(void *)objc_msgSend)((id)objc_getClass("LGPerson"), sel_registerName("run"));

下层通讯

方法 -- 对象 类

typedef struct objc_object LGPerson; 对象的本质就是结构体

每个对象的底层都有一个implist
struct LGPerson_IMPL {
struct NSObject_IMPL NSObject_IVARS;
};

父类发送消息

上一篇下一篇

猜你喜欢

热点阅读