关于一些比较底层的名词解释

IMP SEL
这两个名词一般都是相对来看的 ,SEL类型的变量可以根据@select(方法名)得到,只要方法名一样,那么得到的这个变量就是一样的,即使不在一个类里面,而系统通过方法映射地址找到唯一的方法指针指向的地址,就是IMP,IMP的定义:

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

在runtime里面通过以下方法获取:

method_getImplementation(Method m) 

isa
在每个类里面都可以找到一个class类型的isa,那么isa是什么呢,oc中是这样定义的:

@interface NSObject <NSObject> {
    Class isa  OBJC_ISA_AVAILABILITY;
}

接着往下找

typedef struct objc_class *Class;
struct objc_class {
    Class isa  OBJC_ISA_AVAILABILITY;

#if !__OBJC2__
    Class super_class                                        OBJC2_UNAVAILABLE;
    const char *name                                         OBJC2_UNAVAILABLE;
    long version                                             OBJC2_UNAVAILABLE;
    long info                                                OBJC2_UNAVAILABLE;
    long instance_size                                       OBJC2_UNAVAILABLE;
    struct objc_ivar_list *ivars                             OBJC2_UNAVAILABLE;
    struct objc_method_list **methodLists                    OBJC2_UNAVAILABLE;
    struct objc_cache *cache                                 OBJC2_UNAVAILABLE;
    struct objc_protocol_list *protocols                     OBJC2_UNAVAILABLE;
#endif

} OBJC2_UNAVAILABLE;

这样我们就可以看到关于这个类里面的所有信息了,无论是方法列表还是属性列表都可以找到,大胆猜测,系统NSClassFromString()等一些列方法就是根据这个isa指针找到结果的,这个isa指针是隐藏在NSObject类里面的,所以所有的类都有这个指针。

Ivar property
Ivar是实例变量,在MRC 时代用的比较多,iOS6以后普及ARC之后开始用property比较方便了,不需要在意内存的管理了。
property 属性,其实可以看成property = Ivar + getter + setter。
需要说一下的是getter和setterfan方法是编译器自动添加的,不需要手动写,不过如果有特殊需要,也可以手动写,覆盖自动添加的。(具体的添加方法:每在对象里面添加一个属性,编译器会在isa的ivars里面添加一个名称为在属性名称前加一个下划线的实例变量,即_变量名,然后在methodLists里面添加一个setter方法描述,添加一个getter方法描述,根据计算该属性在对象中的偏移量来具体实现方法,附上一个个人感觉说的很明白的空间门https://segmentfault.com/q/1010000000185056

Method
Method是一个objc_method的结构体,在网上找到的定义:

struct objc_method {  
    SEL method_name;        // 方法名称  
    charchar *method_typesE;    // 参数和返回类型的描述字串  
    IMP method_imp;         // 方法的具体的实现的指针  
}   

可以看到这个结构体里面定义了关于这个方法的基本信息。
Method通过以下方法获取:

class_getClassMethod(Class cls, SEL name)

暂时只能想到这些名词,欢迎大家在评论区交流~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,762评论 0 9
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 2,230评论 0 7
  • 为什么有的人脑子转的快,说话有条理,做决定时能准确地分析利弊做出正确的好决定?而为什么有的人脑子半天都没反应过来,...
    愚小佳阅读 2,193评论 3 11
  • 一:空气中似乎有一股柑橘的香甜,叶知秋这么觉得。她似乎可以看到那香甜的流动,在街边飞扬的裙角,滚滚车流亦或一张张行...
    铃尘阅读 779评论 9 5
  • 只愿做那最后一根稻草 怀着绿色的念想 留着枯黄的脸色 只愿做那最后一根稻草 感受镰刀的锋利 赤裸单薄的悲哀 只愿做...
    山雨笔谈阅读 748评论 0 1