类对象和实例对象

2020-05-12  本文已影响0人  坚持_d49e

import <objc/runtime.h>

实例对象:
NSObject *obj = [[NSObject alloc]init]; obj 就是实例对象

类对象:
Class class1 = [obj class];
Class class2 = [NSObject class];//class方法 无论调用多少次 返回的始终是NSObject的class对象
Class class3 = object_getClass(obj);//这个方法如果传的是实例,那返回的就是实例的class对象,如果传的是class对象,那返回的就是元类对象
Class metaClass = object_getClass(class3) //这个 是元类对象
这些都是类对象

类对象(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 * */
1、isa指针
2、superclass指针
3、类的属性(@property)、类的对象方法(instance method)
4、类的协议信息(protocol),类的成员变量(ivar)

元类对象包含:
1、isa指针
2、superclass指针
3、类的类方法

上一篇下一篇

猜你喜欢

热点阅读