类对象和实例对象
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、类的类方法