OC语言 - 实例对象 | 类对象 | 元类对象
OC 对象
1 - OC 中的对象主要可以分为三种
① instance 对象 (实例对象)
② class 对象 (类对象)
③ meta-class 对象(元类对象)
实例对象
1 - 实例对象是通过类 alloc 出来的对象,每次 alloc 都会产生出一个新的实例对象,占据不同的内存。如下面的 objc1、objc2 就是实例对象
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 指针
③ 类的类方法信息
.......
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了