这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战
今天阳光正好,微风不燥~
真是个唠嗑的好天气~
今天我们唠一唠iOS中的对象
说起对象,老铁们知道iOS中的对象有几种呢~~~
iOS中的三种对象
- 实例对象(instance)
- 类对象(class)
- 元类对象(meta-class)
比如此时我们有两个经典的两个类,Persion继承自NSObject,Student继承自Persion
@interface Persion : NSObject
@property (nonatomic, copy) NSString *name;//占8个字节
@property (nonatomic, assign) int age;//占4个字节
@end
@interface Student : Persion
@property (nonatomic, copy) NSString *teacher;
@end
实例对象
实例对象就是我们通过alloc init 生成的类,比如:
Student *s = [[Student alloc] init];//实例对象
那么实例对象在内存中都存储了那些东西呢?
isa
指针- 成员变量
其中isa指针指向实例对象的类对象,成员变量就是实例对象的属性变量
在当前这个例子中,isa
指针指向 Student
类,成员变量就只有teacher
类对象
类对象就是我们所说的类,可以通过class
方法,或者object_getClass()
获得。
类对象中主要存储了:
isa
指针superClass
指针- 类的属性信息(@property)类的对象方法信息
- 类的协议信息、类的成员变量信息
其中:
isa
指针指向元类对象superClass
指针指向父类对象,这里Student
的父类就是Persion
- 类的属性信息指的是实例对象的属性信息,这里指
teacher
的信息 - 类的对象方法信息就是实例方法信息
- 类的协议信息就是类准守的协议信息
- 类的成员变量信息就是对象的成员变量
元类对象
每一个类对象在内存中都有一个元类对象与之对应,可以通过object_getClass()
获得
需要注意的是通过object_getClass()方法获取元类对象是,传参是类对象
那么元类对象中都有什么呢:
isa
指针superClass
指针- 类的类方法信息
其中:
- isa 指针指向根元类,这里就是指向了nsobject的元类
- superClass 指针指向父类的元类,这里就指向了Persion的元类
放一张经典的图:
图中的SubClass可以看做是Student类,SuperClass可以看做是Persion类,Root class就是NSObject 类
以上就是对iOS中的对象的介绍~~~