OC笔记 - OC对象的分类
作者:互联网
OC对象的分类
1 - OC中的对象主要可以分为三种
① instance对象:实例对象
② class对象:类对象
③ meta-class对象:元类对象
实例对象
1 - 实例对象是通过类 alloc出来的对象,每次 alloc都会产生出一个新的实例对象,占据不同的内存
NSObject *objc1 = [NSObject new]; NSObject *objc2 = [[NSObject alloc] init]; NSLog(@"objc1 = %p objc2 = %p",objc1,objc2); // objc1 = 0x1038292b0 objc2 = 0x103827c50
2 - 实例对象中存储的信息包括
① isa指针
② 其他成员变量
类对象
1 - 类对象在内存是独一份,每个类在内存中有且只有一个类对象
1 #import <Foundation/Foundation.h> 2 #import <objc/runtime.h> 3 4 int main(int argc, const char * argv[]) { 5 6 NSObject *objc1 = [NSObject new]; 7 NSObject *objc2 = [[NSObject alloc] init]; 8 9 Class obClass1 = [objc1 class]; 10 Class obClass2 = [objc2 class]; 11 Class obClass3 = [NSObject class]; 12 13 // runtime函数 14 Class obClass4 = object_getClass(objc1); 15 Class obClass5 = object_getClass(objc2); 16 17 // 你会发现都是同一份 18 NSLog(@"obClass1 = %p obClass2 = %p obClass3 = %p",obClass1,obClass2,obClass3); 19 // obClass1 = 0x7fff91cb8118 obClass2 = 0x7fff91cb8118 obClass3 = 0x7fff91cb8118 20 NSLog(@"obClass4 = %p obClass5 = %p",obClass4,obClass5); 21 // obClass4 = 0x7fff91cb8118 obClass5 = 0x7fff91cb8118 22 return 0; 23 }
2 - 类对象中存储的信息
① isa指针
② superClass指针
③ 类的属性信息、类的对象方法信息
④ 类的成员变量信息、类的协议信息
.......
元类对象
1 - 每个类在内存中有且只有一份元类对象。它和类对象的内存结构是一样的(长的一样),但是用途不一样
1 Class obClass3 = [NSObject class]; 2 Class metaClass = object_getClass(obClass3); 3 NSLog(@"metaClass = %p obClass3 = %p",metaClass,obClass3); 4 // metaClass = 0x7fff91cb80f0 obClass3 = 0x7fff91cb8118
2 -元类对象中存储的信息
① isa指针
② superClass指针
③ 类的类方法信息
.......
标签:对象,分类,OC,笔记,objc2,objc1,NSObject,obClass3,Class 来源: https://www.cnblogs.com/self-epoch/p/16313924.html