1.runtime 是什么
runtime 就是运行时。
2.为什么要有runtime
根据OC的特性“消息发送机制”【object message】,代码可以在运行的时候做任意更改也就是说在运行的时候可以添加新的属性可以删除已有的属性那么我们怎么去实现运行时来做任何我们想做的事呢。
3.runtime 可以把上面的问题解决。那又回到了问题runtime是什么runtime 就是 系统 给我们提供的 一组 API 让我们来可以 实现我们想做的事。
4.runtime 做的事 。
runtime 基本上(1)类的各个方面的动态配置(2)消息传递
5. 类是什么我们看代码可以发现类实际上就是一个结构体。其中包含
Class _Nonnull isa 指向它的元类
#if !__OBJC2__
Class _Nullable super_class 父类;
const char*_Nonnull name 类名;
long version 类版本;
long info 类信息成员变量等;
long instance_size 类的实例所占字节;
struc tobjc_ivar_list *_Nullablei vars 成员变量链表;
struct objc_method_list *_Nullable*_NullablemethodLists 类方法链表;
struct objc_cache *_Nonnull cache 方法缓存;
struct objc_protocol_list *_Nullable protocols 协议链表;
isa 用来确定类所属的类,superclass 用来确定 实例对象的继承关系着就着急了元类的
属性概念
SEL:类成员方法的指针,但不同于C语言中的函数指针,函数指针直接保存了方法的地址,但SEL只是方法编号。
IMP:一个函数指针,保存了方法的地址
Method:方法的结构体,其中保存了方法的名字,实现和类型描述字符串
网友评论