其他分享
首页 > 其他分享> > OC笔记 - OC对象的分类

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