美文网首页
OC中NSObject、Class、Method、IMP等的定义

OC中NSObject、Class、Method、IMP等的定义

作者: oneday527 | 来源:发表于2018-02-24 17:13 被阅读0次

本文主要介绍我们常用的对象在oc中是怎么定义的。
1、NSObject
只包含一个isa指针

@interface NSObject <NSObject> {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-interface-ivars"
    Class isa  OBJC_ISA_AVAILABILITY;
#pragma clang diagnostic pop
}

2、Class

typedef struct objc_class *Class;

struct objc_class {
    Class _Nonnull isa  OBJC_ISA_AVAILABILITY;

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

} OBJC2_UNAVAILABLE;
/* Use `Class` instead of `struct objc_class *` */

3、Method
包含方法名和方法实现

typedef struct objc_method *Method;

struct objc_method {
    SEL _Nonnull method_name                                 OBJC2_UNAVAILABLE;
    char * _Nullable method_types                            OBJC2_UNAVAILABLE;
    IMP _Nonnull method_imp                                  OBJC2_UNAVAILABLE;
}  

4、IMP
实际上是一个函数指针,指向函数入口的地址

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

5、Ivar

typedef struct objc_ivar *Ivar;

struct objc_ivar {
    char * _Nullable ivar_name                               OBJC2_UNAVAILABLE;
    char * _Nullable ivar_type                               OBJC2_UNAVAILABLE;
    int ivar_offset                                          OBJC2_UNAVAILABLE;
#ifdef __LP64__
    int space                                                OBJC2_UNAVAILABLE;
#endif
}  

6、SEL

typedef struct objc_selector *SEL;

7、objc_cache

struct objc_cache {
    unsigned int mask /* total = mask + 1 */                 OBJC2_UNAVAILABLE;
    unsigned int occupied                                    OBJC2_UNAVAILABLE;
    Method _Nullable buckets[1]                              OBJC2_UNAVAILABLE;
};

相关文章

  • OC中NSObject、Class、Method、IMP等的定义

    本文主要介绍我们常用的对象在oc中是怎么定义的。1、NSObject只包含一个isa指针 2、Class 3、Me...

  • iOS方法交换研究

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

  • Method、IMP、SEL、CLASS

    class :被定义为一个指向objc_class的结构体指针,这个结构体表示每一个类的结构体。 struct o...

  • Class, Method,SEL, IMP

    Class: 定义在 objc.h: objc_class定义在runtime.h: Method Method ...

  • OC 消息转发机制

    首先了解几个概念:class 的定义 method的定义 消息转发本质:在运行时将方法地址(imp)和一个名字(s...

  • 结构体 isa_t

    在本章中,我们从NSObject的定义出发,了解了OC中类和对象所对应的数据结构objc_class和objc_o...

  • OC中方法的本质

    OC中方法的定义 OC中Method 被定义为一个objc_method结构体 指针,在这个结构体中,包含一个 S...

  • 今日所学20160105

    1. runtime 基本概念 基本数据结构:Class,Method,SEL,IMP,id Class:指向ob...

  • Method Swizzling需要class_addMetho

    理论:Method Swizzling本质上就是对IMP和SEL的交换。在OC语言的runtime特性中,调用一个...

  • Objective-C底层数据结构

    类的数据结构 Class(指针) Method(指针) Ivar(指针) objc_property_t IMP ...

网友评论

      本文标题:OC中NSObject、Class、Method、IMP等的定义

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