runtime 学习笔记(三)

    今日搞清楚三个东西SEL、IMP、Method

(一、)SEL

    SEL是selector在Object-C中的表示类型。selector可以理解为区别方法的ID。

typedefstructobjc_selector *SEL;

    objc_selector的定义如下:

struct objc_selector {

char *name;                      OBJC2_UNAVAILABLE;// 名称

char *types;                      OBJC2_UNAVAILABLE;// 类型

};

    通过SEL可以迅速定位到IMP(下文会讲解)

(二、)IMP

    在objc.h中IMP有如下定义:

typedef id (*IMP)(id, SEL, ...);

    IMP是“implementation”的缩写,它是由编译器生成的一个函数指针。当你发起一个消息后(下文介绍),这个函数指针决定了最终执行哪段代码。

(三、)Method

    Method的定义:

typedefstructobjc_method *Method;

    objc_method的定义如下:

structobjc_method {

SEL method_name                  OBJC2_UNAVAILABLE;// 方法名

char*method_types                OBJC2_UNAVAILABLE;// 方法类型IMP 

method_imp                    OBJC2_UNAVAILABLE;// 方法实现

}

    方法名method_name类型为SEL,上文提到过。

    方法类型method_types是一个char指针,存储着方法的参数类型和返回值类型。

    方法实现method_imp的类型为IMP,上文提到过。

    单个指出来可能大家都能理解这个三个东西分别是什么,但是放在一起有的人就是搞不明白,它们三者到底是个什么关系?我是这样理解的:SEL可以想成一个key,IMP可以想成value,而Method可以想成key到value的映射方法。不知道这样说是否更容易理解。

     即通过SEL可以迅速的定位到IMP,但是要有Method的帮助。希望这样说能对大家的理解有所帮助。


    后面会上代码了,单纯的讲太枯燥无味,还是让实践来明了一切吧。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,082评论 0 9
  • 前言 runtime其实在我们日常开发过程中很少使用到,尤其是像我现在比较初级的程序猿就更用不到了。但是去面试很多...
    MurtoTien阅读 861评论 0 2
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 2,348评论 0 7
  • 转载:http://yulingtianxia.com/blog/2014/11/05/objective-c-r...
    F麦子阅读 840评论 0 2
  • 本文转载自:http://yulingtianxia.com/blog/2014/11/05/objective-...
    ant_flex阅读 890评论 0 1

友情链接更多精彩内容