美文网首页
关于SEL和IMP

关于SEL和IMP

作者: lixiaoshuai | 来源:发表于2017-06-23 15:31 被阅读48次

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点语法是获取不到其属性的。

相关文章

  • 关于SEL和IMP

    1.SEL的基本特点 在内存中每个类的方法都存储在类对象中 每个方法都有一个与之对应的SEL类型的数据 根据一个S...

  • OC底层原理探索—Method Swizzling方法交换

    sel 和 imp 在讲Method Swizzling前先讲一下sel 和 imp sel:方法编号,在read...

  • 学习Runtime动态方法解析碰到的问题

    关于SEL和IMP 在学习动态方法解析中遇到的问题 其中(IMP)missingClassPrint处直接将函数名...

  • SEl和IMP

    一,SEl和IMP到底是什么 SEL : 类成员方法的指针,但不同于C语言中的函数指针,函数指针直接保存了方法的地...

  • 3-1 runtime-isa数据结构

    IMP:一个函数指针,保存了方法的地址 一张SEL和IMP的对应表 通过SEL可以找到IMP runtime ...

  • iOS方法交换研究

    1、Class/SEL/Method/IMP Class+SEL=>Method=>IMP,... 2、class...

  • iOS IMP 与 SEL

    IMP 官方文档 SEL 官方文档 sel_registerName 通过SEL 找到对应的IMP并调用 meth...

  • 用代码理解iOS消息转发与SEL、IMP

    OC的方法调用,其实就是消息发送。 在写代码之前先说一下SEL于IMP,OC方法由SEL和IMP组成,SEL是方法...

  • SEL、IMP和Class

    转载自:Objective-C中的SEL、IMP和Class类型 1、SEL类型 例子: SEL say; SEL...

  • - (IMP)methodForSelector:(SEL)aS

    这个方法是获取某个SEL的IMP问题来了,什么是SEL,什么是IMP? 1. SEL Objective-C是动态...

网友评论

      本文标题:关于SEL和IMP

      本文链接:https://www.haomeiwen.com/subject/soozqxtx.html