我们知道对象的指针指向类 那么类的内存布局是什么样的 对象和类还有哪些关系下面我们来探索下

- 在源码环境下我们能看到类的底层结构体
- 我们稍微归纳下
struct objc_class : objc_object {
Class superclass;
cache_t cache;
class_data_bits_t bits;
}

- cache_t的内存布局算出来为0x20
- 类的一些方法属性都在class_data_bits_t 这个数据里面
那么类方法 对象方法是如何存储的呢?

- 根据上图 我们可以知道继承和isa 以及元类之间的关系
练习
**BOOL** re1 = [(**id**)[NSObject class] isKindOfClass:[NSObject class]];
**BOOL** re2 = [(**id**)[NSObject class] isMemberOfClass:[NSObject class]];
**BOOL** re3 = [(**id**)[LGPerson class] isKindOfClass:[LGPerson class]];
**BOOL** re4 = [(**id**)[LGPerson class] isMemberOfClass:[LGPerson class]];
NSLog(@" re1 :%hhd\n re2 :%hhd\n re3 :%hhd\n re4 :%hhd\n",re1,re2,re3,re4);
**BOOL** re5 = [(**id**)[NSObject alloc] isKindOfClass:[NSObject class]];
**BOOL** re6 = [(**id**)[NSObject alloc] isMemberOfClass:[NSObject class]];
**BOOL** re7 = [(**id**)[LGPerson alloc] isKindOfClass:[LGPerson class]];
**BOOL** re8 = [(**id**)[LGPerson alloc] isMemberOfClass:[LGPerson class]];
NSLog(@" re5 :%hhd\n re6 :%hhd\n re7 :%hhd\n re8 :%hhd\n",re5,re6,re7,re8);
打印结果 1 0 0 0 1 1 1 1