美文网首页iOS Developer
关于一些比较底层的名词解释

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

作者: iOS程序员asdf | 来源:发表于2017-01-16 17:24 被阅读0次

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)

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

相关文章

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

    IMP SEL这两个名词一般都是相对来看的 ,SEL类型的变量可以根据@select(方法名)得到,只要方法名一...

  • 初识Spring

    一、概要流程 二、详细大致流程 三、关于接口及一些名词解释

  • 大滇说茶1001夜之131 关于普洱茶的一些名词解释

    大滇说茶1001夜,今晚解释一些名词。 今天讲的内容比较初级。群内增加的新茶友比较多,主要做一些名词解释:...

  • 随笔 8.6

    关于教育,之前的理解的底层来自于百度的名词解释:教育是传授知识,只不过从最早的口口相传到后来的各种载体再到学校这个...

  • 关于前端的一些名词解释

    一些简单通俗的前端领域相关名词解释,帮助各位想学前端的同学尽快入门。 什么是前端? 什么是前端?端是一个什么概念?...

  • 2017-12-26值对象

    内的技术分享两级分化比较严重,要么太过高大上——关于架构、新技术之类,要么太底层——关于数据库优化、底层性能优化之...

  • CFNetwork的介绍和使用

    CFNetwork背景简介 CFNetwork是ISO中一个比较底层的网络框架,C语言编写,可以控制一些更底层的东...

  • iOS 底层原理探索技巧

       在中高级iOS开发岗位面试时,关于iOS的一些底层知识,底层实现是一定会被问到的。比如最常见的的对象底层实现...

  • Unity学习—渲染知识基础

    关于Unity 渲染概念的基本知识,和部分技术名词解释 本文原地址:Unity学习—渲染知识基础 名词解释 纹理 ...

  • Java中的一些基础总结

    概述   本文主要介绍学习Java中遇到的一些比较基础的概念性的东西及一些搞不太清楚的名词解释。以前没有仔细了解过...

网友评论

    本文标题:关于一些比较底层的名词解释

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