1.SEL的基本特点
在内存中每个类的方法都存储在类对象中
每个方法都有一个与之对应的SEL类型的数据
根据一个SEL数据就可以找到对应的方法地址,进而调用方法
SEL类型的定义: typedef struct objc_selector * SEL
2.SEL对象的创建
SEL s1 = @selector(test1); // 将test1方法包装成SEL对象
SEL s2 = NSSelectorFromString(@"test1"); // 将一个字符串方法转换成为SEL对象
3.SEL和IMP的区别
SEL是一个方法的编号 IMP是函数指针,直接获取函数的内存地址
两者的关系在于在类对象的数据结构中,其存储的实例方法列表(dispatch table)就是用SEL和IMP作为映射关系存在的(其实SEL为整形,其与实例方法有一个表的对应关系,在映射到IMP)。通过SEL和IMP的关系,可以通过runtime动态修改其对应关系,进一步修改方法的实现。
4.关于iOS类的继承关系图
图中包括三种对象,实例对象,类对象,元类对象
所有的对象均继承于自己的父类,NSObjec 是根类 其继承关系为nil
实例对象的ISA指针指向类对象,类对象的ISA指针指向元类,元类的ISA指针均指向根源类,根源类的ISA指针也指向自己
类对象存储 普通成员变量与普通成员方法(-开头的方法)
元类对象 存储类的static类成员变量与static类成员方法(+开头的方法),在类方法中self关键字代表的是这个类,以self点语法是获取不到其属性的。