iOS 分类和扩展的作用和区别

2020-04-17  本文已影响0人  天空知诚
struct category_t {
    const char *name;                             // 类名
    classref_t cls;                               // 类
    struct method_list_t *instanceMethods;        // 实例方法列表
    struct method_list_t *classMethods;           // 类方法列表
    struct protocol_list_t *protocols;            // 协议列表
    struct property_list_t *instanceProperties;   // 添加的属性列表
    // Fields below this point are not always present on disk.
    struct property_list_t *_classProperties
};

从上面可以看出分类可以添加实例方法、类方法、协议、属性,但是不能添加实例变量。

struct objc_class {
    Class isa  OBJC_ISA_AVAILABILITY;
#if !__OBJC2__
    Class super_class                       OBJC2_UNAVAILABLE;  // 父类
    const char *name                        OBJC2_UNAVAILABLE;  // 类名
    long version                            OBJC2_UNAVAILABLE;  // 类的版本信息,默认为0
    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;
上一篇 下一篇

猜你喜欢

热点阅读